Есть ли способ изменить конфигурацию отображения сущностей для доктрины вне файла конфигурации? - PullRequest
9 голосов
/ 20 января 2012

В моем стандартном приложении Symfony2 у меня есть несколько пакетов с некоторыми сущностями.Некоторые из этих объектов находятся не в стандартной папке, которую обнаруживает автоматическое обнаружение доктрины (например, /src/Acme/DemoBundle/Entities), а в другом месте.

Я мог бы легко использовать config.yml, чтобы указать доктрине использовать другое местоположениекак это:

doctrine:
    orm:
        auto_mapping: false
        mappings:
           AcmeDemoBundle:
              type: annotation
              prefix: Acme\DemoBundle\Entities\
              dir: %kernel.cache_dir%\Acme\DemoBundle\Entities

Это работает.Но, скажем, у меня 10 пакетов с другим отображением, config.yml очень быстро раздувается.Есть ли другой способ, например, с помощью CompilerPass или через DependencyInjection, поэтому мне не нужно добавлять все сущности в мой config.yml?Я уже заглянул в DoctrineBundle, но пока мне не повезло.

Ответы [ 2 ]

2 голосов
/ 02 февраля 2012

Чтобы ответить себе:

Самый простой способ - настроить автозагрузку, изменять настройки не нужно.В стандартном дистрибутиве Symfony в autoload.php вы должны добавить другое местоположение в метод registerNamespace:

$loader->registerNamespaces(array(
    [...]
    'Foo' => array(__DIR__.'/../src/dirA', __DIR__.'/../src/dirB')
));

Затем Doctrine будет искать сущности в пространстве имен Foo сначала в dirA, а затем в dirB, если нетнайдено.

0 голосов
/ 21 января 2012

Вы можете включить другие файлы конфигурации, используя imports

# yaml
imports:
    - { resource: entities.yml }

<!-- xml -->
<imports>
    <import resource="enditites.xml" />
</imports>

// PHP
$loader->import('entities.php');

Вам даже не нужно придерживаться одного типа файла. Например, можно импортировать файл конфигурации xml в файл yaml.

...