Doctrine / ORM Entity во вложенных пространствах имен в Symfony3 [duplicate]

Вы можете преобразовать текущее время, подобное этому

t=datetime.fromtimestamp(time.time())
t.strftime('%Y-%m-%d')
'2012-03-07'

. Преобразование даты в строку в разные форматы.

import datetime,time

def createDateObject(str_date,strFormat="%Y-%m-%d"):    
    timeStamp = time.mktime(time.strptime(str_date,strFormat))
    return datetime.datetime.fromtimestamp(timeStamp)

def FormatDate(objectDate,strFormat="%Y-%m-%d"):
    return objectDate.strftime(strFormat)

Usage
=====
o=createDateObject('2013-03-03')
print FormatDate(o,'%d-%m-%Y')

Output 03-03-2013
9
задан Chris 29 July 2015 в 18:53
поделиться

2 ответа

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

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

13
ответ дан Tomasz Struczyński 26 August 2018 в 04:40
поделиться

Если вы хотите упорядочить свои сущности доктрины в подпапки

, например: src/AppBundle/Entity/subfolder/MyEntity.php

, то соответствующий файл ORM должен выглядеть так:

src/Resources/config/Doctrine/subfolder.MyEntity.orm.yml

Не вставляйте вложенные папки внутри src/Resources/config/Doctrine/ *

* Примечание: если вы посмотрите на документы документации Doctrine , это выглядит так может быть возможно настроить другое местоположение для вашего файла orm.yml, используя:

doctrine:
      orm:
        # An array of mappings, which may be a bundle name or     something else
        mapping_name:
              mapping:              true
              type:                 ~
              dir:                  ~
              alias:                ~
              prefix:               ~
              is_bundle:            ~

, но я этого не пробовал. может быть, кто-то еще может подтвердить, чтобы улучшить этот ответ?

6
ответ дан Chris 26 August 2018 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: