Короче говоря, это возможно.
Если у вас есть структура папок внутри папки Entity вашего пакета, это просто. Вы должны называть файлы ORM, используя часть пространства имен объекта ниже пространства имен Entity и заменяя \
на .
.
Итак, если, например, у вас есть Project\TestBundle\Entity\Place\Type
объект, файл ORM (расположенный в папке config/doctrine
внутри пакета] будет иметь имя Place.Type.orm.yml
.
Если вы хотите для использования в качестве классов объектов Doctrine извне папки Entity (или даже вне папки пакета), она становится немного сложной, но все же возможна. Doctrine Bundle позволяет определять пользовательские местоположения сопоставления для ваших классов в конфигурации.
Опять же - пример. Если у вас есть сущности внутри пространства имен Project\Test
(в папке src/Project/Test
), вы можете определить отображение следующим образом:
app / config / config * .yml
blockquote>doctrine: orm: MyCustomDomain: mapping: true type: yml dir: %kernel.root_dir%/config/projecttest alias: ProjectTest prefix: Project\Test is_bundle: false
На самом деле Doctrine Bundle делает что-то подобное автоматически, поэтому вы можете поместить все свои классы в подпапку Entity и больше не бояться.
Префикс - это префикс пространства имен. Папка - это путь к папке с файлами конфигурации. Псевдоним интересен - он позволяет использовать более простые имена объектов в DQL-запросах и файлах сопоставления. Синтаксис Symfony
TestBundle:Test
работает в одной и той же предпосылке -TestBundle
является псевдонимом для всех объектов в TestBundle.is_bundle
сообщает Doctrine, что сущности находятся за пределами пакета Symfony и требуют немного другого обращения.Есть некоторые оговорки в определении вашего собственного сопоставления. Mapper работает с использованием правила «первого совпадения» на префиксе. Поэтому, если вы объявляете свое сопоставление с слишком широким префиксом пространства имен, оно может переопределять другие сопоставления.
Тем не менее, это полезно иногда. Например, если вы хотите отображать классы из «зарубежной» библиотеки непосредственно в Doctrine. Или создайте библиотеку, не полностью привязанную к Symfony, и хотите сохранить некоторые из ваших классов за пределами пакета.