2014-11-23 3 views
2

Я хочу, чтобы адаптировать свою структуру папок на нечто похожее:Как сопоставить доктрины сущностей

app 
└─── ... 
bin 
└─── ...  
src 
└───MyNamespace 
    ├───Application 
    │ ├───Controller 
    │ │ └───UserController.php  
    │ ├───Entity 
    │ │ └───User 
    │ │  ├───User.php 
    │ │  └───UserFactory.php 
vendor 
└─── ...   
web 
└─── ... 

мой файл config.yml в разделе ОРМ выглядит следующим образом:

orm: 
    auto_generate_proxy_classes: "%kernel.debug%" 
    auto_mapping: false 
    mappings: 
     user: 
      type:  php 
      dir:  %kernel.root_dir%/../src/MyNamespace/Application/Entity/User/User 
      prefix: MyNamespace\Application\Entity\User\User 
      alias:  User 
      is_bundle: false  

и мой User.php файл начинается с:

namespace MyNamespace\Application\Entity\User; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* User 
* 
* @ORM\Table() 
* @ORM\Entity 
*/ 
class User 
{ 
... 
} 

И тогда я получаю:

InvalidArgumentException: Указанный несуществующий каталог «C:/www/myapp/app /../ src/MyNamespace/Application/Entity/User/User» в качестве источника отображения Doctrine.

Btw, я использую рамки Symfony2.

+0

Прочитайте сообщение об ошибке, а затем подумайте, какой из них, возможно, является аббревиатурой. – Cerad

+0

IIRC, вы не можете иметь вспомогательные папки в каталоге Entity. –

ответ

0

Ну, у меня есть Entity из жгутов и конфигурация точек только источник сущностей, например:

orm: 
    auto_generate_proxy_classes: "%kernel.debug%" 
    auto_mapping: false 
    mappings: 
     user: 
      type:  php 
      dir:  %kernel.root_dir%/../src/MyNamespace/Application/Entity 
      prefix: MyNamespace\Application\Entity 
      alias:  Entity 
      is_bundle: false 

Entity реж должен быть каталогом, поэтому постарайтесь изменить dir, prefix и alias настройки , И чем вы на самом деле можете положить вложенную папку User в нее и работать с ней по пространству имен.

Кстати, вы можете прочитать отличный article о настройке структуры Symfony.

3

Grimv01k дал мне намек, но окончательный рабочий раствор были в файле config.yml с:

mappings: 
    user: 
     type: annotation 
     dir: %kernel.root_dir%/../src/MyNamespace/Application/Model/User 
     alias: 'User' 
     prefix: MyNamespace\Application\Model\User 
     is_bundle: false 

это все. Если я не изменил тип отображения в аннотации, у меня была ошибка «Нет файла сопоставления с именем« MyNamespace.Application.Entity.User.User.php », даже если этот файл находится в моей структуре проекта папки. Тем не менее я этого не понимал, но теперь это работает. Noob days ... :)

Смежные вопросы