создавать новые структуры папок в Symfony - PullRequest
0 голосов
/ 19 октября 2019

Я хочу разделить свои разделы в Symfony по папкам, подобным этому:

src
 - Blog
  -- Controller
  -- Entity
  -- Form
  -- Repository
 - Main
  -- Controller
  -- Entity
  -- Form
  -- Repository

При использовании связки я не могу использовать аннотации в контроллере и сущности и не могу использовать make: entity в моем блоге отдельно,Есть ли способ создать эту структуру в Symfony 4?

Ответы [ 2 ]

1 голос
/ 19 октября 2019

Вполне возможно, вы просто получите несколько более сложные конфигурации:

# services for all src/*/ directories, ecxluding 
App\:
    resource: '../src/*'
    exclude: 
      - ../src/Tests/
      - ../src/Kernel.php
      - '../src/*/{Entity,Migrations}'

App\Blog\Controller\:
    resource: '../src/Blog/Controller'
    tags: ['controller.service_arguments']
# repeat for other sub-directories
# App\Main\Controller\:

Чтобы использовать Maker Bundle, дайте ему более конкретный путь

# config/packages/dev/maker.yaml
# create this file if you need to configure anything
maker:
    # tell MakerBundle that all of your classes lives in an
    # Acme namespace, instead of the default App
    # (e.g. Acme\Entity\Article, Acme\Command\MyCommand, etc)
    root_namespace: 'App\Blog\'

Так как этовсе по-прежнему одно и то же приложение, вы можете избежать макета «поддельной связки», инвертировав его и сгруппировав каждый тип класса по разделам:

src/
  - Controller/
    -- Blog/
    -- Main/ 
  - Entity
    -- Blog/
    -- Main/ 

Это не потребует никаких изменений конфигурации в стандартном стиле.

1 голос
/ 19 октября 2019

Поскольку Symfony является PHP-фреймворком и не предусматривает никаких вариантов выбора, вы можете свободно размещать свои классы в любом месте, пока автозагрузчик Composer может их загружать. Возможно, вам придется настроить пакеты для поиска объектов в других пространствах имен / местах. По умолчанию они настроены в вашем приложении для загрузки из предопределенной файловой структуры.

Например, когда ваша сущность находится в src/Blog/Entity/Post, она, вероятно, должна иметь полное имя класса, например App\Blog\Entity\Post. Затем вам нужно настроить стандартную конфигурацию Doctrine , чтобы загрузить объекты с таким пространством имен:

doctrine:
    # ...
    orm:
        # ...
        mappings:
            Blog:
                is_bundle: false
                type: annotation

                # before:
#               dir: '%kernel.project_dir%/src/Entity'
#               prefix: 'App\Entity'
#               alias: App

                # after:
                dir: '%kernel.project_dir%/src/Blog/Entity'
                prefix: 'App\Blog\Entity'
                alias: Blog

Другой пример, вам нужно изменить конфигурацию маршрутизации так что он ищет контроллеры в App\Blog\Controller:

blog_routes:
    resource: '../src/Blog/Controller/'
    type:     annotation
...