2012-06-16 3 views
12

Эй У меня есть два пакета в моем проекте symfony2. один - Bundle, а другой - PatentBundle.Неизвестный псевдоним пространства имен Entity в symfony2

Мое приложение/Config/route.yml файл

MunichInnovationGroupPatentBundle: 
resource: "@MunichInnovationGroupPatentBundle/Controller/" 
type:  annotation 
prefix: /
defaults: { _controller: "MunichInnovationGroupPatentBundle:Default:index" } 

MunichInnovationGroupBundle: 
resource: "@MunichInnovationGroupBundle/Controller/" 
type:  annotation 
prefix: /v1 
defaults: { _controller: "MunichInnovationGroupBundle:Patent:index" } 

login_check: 
pattern: /login_check 

logout: 
pattern: /logout 

внутри моего контроллера я есть

<?php 
namespace MunichInnovationGroup\PatentBundle\Controller; 

use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\HttpFoundation\Request; 
use JMS\SecurityExtraPatentBundle\Annotation\Secure; 
use Symfony\Component\Security\Core\Exception\AccessDeniedException; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; 
use Symfony\Component\Security\Core\SecurityContext; 

use MunichInnovationGroup\PatentBundle\Entity\Log; 
use MunichInnovationGroup\PatentBundle\Entity\UserPatent; 
use MunichInnovationGroup\PatentBundle\Entity\PmPortfolios; 
use MunichInnovationGroup\PatentBundle\Entity\UmUsers; 
use MunichInnovationGroup\PatentBundle\Entity\PmPatentgroups; 
use MunichInnovationGroup\PatentBundle\Form\PortfolioType; 
use MunichInnovationGroup\PatentBundle\Util\SecurityHelper; 
use Exception; 
/** 
* Portfolio controller. 
* @Route("/portfolio") 
*/ 
class PortfolioController extends Controller { 
/** 
* Index action. 
* 
* @Route("/", name="v2_pm_portfolio") 
* @Template("MunichInnovationGroupPatentBundle:Portfolio:index.html.twig") 
*/ 
    public function indexAction(Request $request) { 
    $portfolios = $this->getDoctrine() 
    ->getRepository('MunichInnovationGroupPatentBundle:PmPortfolios') 
    ->findBy(array('user' => '$user_id')); 

      // rest of the method 
    } 

Edit:

Мой Entity Класс

<?php 

namespace MunichInnovationGroup\PatentBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

    /** 
    * MunichInnovationGroup\PatentBundle\Entity\PmPortfolios 
    * 
    * @ORM\Table(name="pm_portfolios") 
    * @ORM\Entity 
    */ 
    class PmPortfolios 
    { 
/** 
* @var string $id 
* 
* @ORM\Column(name="id", type="string", length=36, nullable=false) 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="UUID") 
*/ 
private $id; 

/** 
* @var string $portfolioName 
* 
* @ORM\Column(name="portfolio_name", type="string", length=255, nullable=false) 
*/ 
private $portfolioName; 

/** 
* @var text $description 
* 
* @ORM\Column(name="description", type="text", nullable=true) 
*/ 
private $description; 

/** 
* @var string $permalink 
* 
* @ORM\Column(name="permalink", type="string", length=255, nullable=false) 
*/ 
private $permalink; 

/** 
* @var string $sharingCode 
* 
* @ORM\Column(name="sharing_code", type="string", length=255, nullable=false) 
*/ 
private $sharingCode; 

/** 
* @var boolean $shared 
* 
* @ORM\Column(name="shared", type="boolean", nullable=false) 
*/ 
private $shared; 

/** 
* @var integer $sharedPortfolioCalls 
* 
* @ORM\Column(name="shared_portfolio_calls", type="integer", nullable=true) 
*/ 
private $sharedPortfolioCalls; 

/** 
* @var boolean $isDefault 
* 
* @ORM\Column(name="is_default", type="boolean", nullable=false) 
*/ 
private $isDefault; 

/** 
* @var UmUsers 
* 
* @ORM\ManyToOne(targetEntity="UmUsers") 
* @ORM\JoinColumns({ 
* @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
* }) 
*/ 
private $user; 



/** 
* Get id 
* 
* @return string 
*/ 
public function getId() 
{ 
    return $this->id; 
} 

/** 
* Set portfolioName 
* 
* @param string $portfolioName 
*/ 
public function setPortfolioName($portfolioName) 
{ 
    $this->portfolioName = $portfolioName; 
} 

/** 
* Get portfolioName 
* 
* @return string 
*/ 
public function getPortfolioName() 
{ 
    return $this->portfolioName; 
} 

/** 
* Set description 
* 
* @param text $description 
*/ 
public function setDescription($description) 
{ 
    $this->description = $description; 
} 

/** 
* Get description 
* 
* @return text 
*/ 
public function getDescription() 
{ 
    return $this->description; 
} 

/** 
* Set permalink 
* 
* @param string $permalink 
*/ 
public function setPermalink($permalink) 
{ 
    $this->permalink = $permalink; 
} 

/** 
* Get permalink 
* 
* @return string 
*/ 
public function getPermalink() 
{ 
    return $this->permalink; 
} 

/** 
* Set sharingCode 
* 
* @param string $sharingCode 
*/ 
public function setSharingCode($sharingCode) 
{ 
    $this->sharingCode = $sharingCode; 
} 

/** 
* Get sharingCode 
* 
* @return string 
*/ 
public function getSharingCode() 
{ 
    return $this->sharingCode; 
} 

/** 
* Set shared 
* 
* @param boolean $shared 
*/ 
public function setShared($shared) 
{ 
    $this->shared = $shared; 
} 

/** 
* Get shared 
* 
* @return boolean 
*/ 
public function getShared() 
{ 
    return $this->shared; 
} 

/** 
* Set sharedPortfolioCalls 
* 
* @param integer $sharedPortfolioCalls 
*/ 
public function setSharedPortfolioCalls($sharedPortfolioCalls) 
{ 
    $this->sharedPortfolioCalls = $sharedPortfolioCalls; 
} 

/** 
* Get sharedPortfolioCalls 
* 
* @return integer 
*/ 
public function getSharedPortfolioCalls() 
{ 
    return $this->sharedPortfolioCalls; 
} 

/** 
* Set isDefault 
* 
* @param boolean $isDefault 
*/ 
public function setIsDefault($isDefault) 
{ 
    $this->isDefault = $isDefault; 
} 

/** 
* Get isDefault 
* 
* @return boolean 
*/ 
public function getIsDefault() 
{ 
    return $this->isDefault; 
} 

/** 
* Set user 
* 
* @param MunichInnovationGroup\PatentBundle\Entity\UmUsers $user 
*/ 
public function setUser(\MunichInnovationGroup\PatentBundle\Entity\UmUsers $user) 
{ 
    $this->user = $user; 
} 

/** 
* Get user 
* 
* @return MunichInnovationGroup\PatentBundle\Entity\UmUsers 
*/ 
public function getUser() 
{ 
    return $this->user; 
} 

}

Мой расслоением главный класс: MunichInnovationGroupPatentBundle.php

<?php 

    namespace MunichInnovationGroup\PatentBundle; 

    use Symfony\Component\HttpKernel\Bundle\Bundle; 

    class MunichInnovationGroupPatentBundle extends Bundle 
{ 
} 

, когда я пытаюсь загрузить локальный/Web/app_dev.php/портфель

Это говорит

Unknown Entity namespace alias 'MunichInnovationGroupPatentBundle'. 

Я не удалось выяснить эту ошибку , пожалуйста, помогите мне, если кто-нибудь задумывается, что я многому погубил :(

Заранее спасибо 500 Внутренняя ошибка сервера - ORMException

+0

Попробуйте проверить PmPortfolios объект, если пространство имен верный. –

+0

Другое возможное решение: http://stackoverflow.com/questions/12145101/how-to-address-the-bundle-in-php-app-console-generatedoctrinecrud – CodeSlave

ответ

2

Check вы связывайте логическое имя (MunichInnovationGroupPatentBundle). Логическое имя пула - это имя основного класса вашего пакета, например. JobBundle

и предоставить исходный код объекта.

+0

Я добавил код класса сущности –

+0

вы проверили журналы symfony? – drupality

+0

no я не проверял их –

26

Пожалуйста, проверьте свой config.yml.

Пересмотрено в разделе mappings от entity_managers.
Вы должны иметь что-то вроде MunichInnovationGroupPatentBundle: ~

То есть:

doctrine: 
    orm: 
     entity_managers: 
      defaults: 
       mappings: 
        MunichInnovationGroupPatentBundle: ~ 
+2

Не должно быть достаточно с ** auto_mapping: true **? – Jens

+2

У меня просто была проблема с удалением по умолчанию auto_mapping = true в конфигурации моего SF 2.3, чтобы добавить сопоставление stof/doctrineextensionsbundle после того, как SF2 выбрала исключение, которое auto_mapping не было допустимым дочерним. Повторное добавление auto_mapping как дочернего узла узла «сопоставления» (дочерний элемент «defaults» вместо прямого дочернего элемента orm) выше исправляет проблемы. – nealio82

+0

этот ответ решается моя проблема. SF, см. Пространства имен через этот контроллер и правильно создавать объекты сборки. полное описание в этом ответе: http://stackoverflow.com/a/37652091/5809937 –

0

Я это когда пытался использовать Bandle имя без имени основной папки. Это было в конфиге/security.yml

структура

папки в моем случае это следующий SRC/Dp/UserBundle/....

Я изменил этот `поставщиков:

main: 
     entity: { class: UserBundle:User, property: username }` 

к этому `провайдеры:

main: 
     entity: { class: DpUserBundle:User, property: username }` 

Так копирует имя неизвестного имени Entity и поиск каждого записей в проекте, проверить - они должны быть с префиксом папки (Dp в мой случай)

0

Как и в версии Symfony 2.3.7, я использовал NameofCompanySomethingBundle: EntityRequired, например. AcmeBlogBundle: Пользователь, и он работает.

auto-mapping: true (по умолчанию) используется в orm: in config.yml.

0

Эта ошибка возникает, если вы используете несколько менеджеров сущностей, и вы не указываете диспетчер объектов в своей функции контроллера.

$em = $this->get('doctrine.orm.//your_entity_manager_name_here//_entity_manager'); 
$dql = "SELECT ..."; 
$query = $em->createQuery($dql); 

это сработало для меня.

8

В моем случае я пропускал имя пространства имен в security.yml под поставщиками

Я имел:

entity: { class: AdministratorBundle:AdminUser }

и необходимо иметь:

entity: { class: NamespaceAdministratorBundle:AdminUser }

+0

Я забыл, что корневой класс пакета включает пространство имен в начале его имени. Благодаря! Пример для других: Корневой класс для 'Company \ MyBundle' является' CompanyMyBundle', а не 'MyBundle'. – jxmallett

0

Документация here заявляет, что вы можете использовать строку 'MunichInnovationGroupPatentBundle:PmPortfolios' как shortcut to 'MunichInnovationGroupPatentBundle\Entity\PmPortfolios' до тех пор, пока ваше лицо живет под пространством имен Entity вашего пакета.

Ваше расслоение MunichInnovationGroupBundle поэтому вместо

->getRepository('MunichInnovationGroupPatentBundle:PmPortfolios') 

использование

->getRepository('MunichInnovationGroupPatentBundle\Entity\PmPortfolios') 
5

Если вы используете 2 или больше менеджеров сущностей - вам нужно указать менеджеру также getManager ('YourManager ')

$repository = 
    $this->getDoctrine() 
    ->getManager('YourManager') 
    ->getRepository('YourBundle:YourEntity'); 
+0

Этот ответ следует переместить выше. Поскольку я почти потерял надежду, а затем я попробовал это решение, и это сработало. –

1

Попробуйте быть более явным в файле config.yml, добавив несколько полей:

orm: 
    ... 

    mappings: 
     MunichInnovationGroupPatentBundle: 
       type: annotation 
       dir: "MunichInnovationGroupPatentBundle/Controller" 
       is_bundle: true 
       prefix: MunichInnovationGroup\PatentBundle 
       alias: MunichInnovationGroupPatentBundle 
     [more mappings..] 
+0

Я как раз собирался добавить ответ вроде этого, он работал для меня с таким подходом, но только после того, как я изменил псевдоним: 'на что-нибудь отличное от' MunichInnovationGroupPatentBundle' сказать: 'псевдоним: MunichInnovation' – juanmf

1

Пожалуйста, проверьте config.yml + AppKernel.php

config.yml должен быть

orm: 
    auto_generate_proxy_classes: "%kernel.debug%" 
    naming_strategy: doctrine.orm.naming_strategy.underscore 
    auto_mapping: true 

или заменить auto_mapping с

mappings: 
     StoreShopBundle: ~ 

больше, проверить это: https://stackoverflow.com/a/37652091/5809937

в AppKernel.php не забудьте проверить, если пучок активирован:

 new MunichInnovationGroup\PatentBundle\MunichInnovationGroupPatentBundle(), 
Смежные вопросы