Composer - расширение iconv отсутствует

Короче говоря, это возможно.

Если у вас есть структура папок внутри папки 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

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, и хотите сохранить некоторые из ваших классов за пределами пакета.

10
задан Tanadche 4 August 2014 в 22:08
поделиться