Symfony 4 - структура и службы пользовательских папок - PullRequest
1 голос
/ 02 июня 2019

Я хочу реализовать структуру папок, рекомендованную Никола Поса .

Структура, которую я хотел бы, выглядит примерно так, как показано ниже.

src/
   Domain/
      User/
         UserEntity.php
         UserController.php
      Pages/
         DefaultPageController.php

Идея состоит в том, чтобы логически сгруппировать функции пространства имен или аналогичный контент. Кажется, я получаю эту ошибку:

Файл "../src/Controller" не существует (в: / Users / dev / Sites / web / html / sandbox / php / crud / config) в / Users / dev / Sites / web / html / sandbox / php / crud / config / services.yaml (загружается в ресурс "/Users/dev/Sites/web/html/sandbox/php/crud/config/services.yaml").

Я не уверен, насколько важно подключить эти сервисы. Если я закомментирую свойство App\Controller services.yaml, оно исчезнет.

Как загрузить контроллеры в service.yaml со структурой src/Domain/Feature/FeatureController.php?

Ответы [ 2 ]

1 голос
/ 02 июня 2019

Я бы пошел и создал интерфейс Controller, как предлагает Cerad. Однако, начиная с Symfony 3.3 , вам не нужно трогать ядро:

services:
    _instanceof:
        YourApp\Ui\ControllerInterface:
            public: true
            tags: ['controller.service_arguments']

Et voila.

1 голос
/ 02 июня 2019

Конечно, вы можете пойти в старую школу и просто определить каждую услугу контроллера индивидуально:

# config/services.yaml
Domain\Feature\FeatureController:
    tags: ['controller.service_arguments']

Однако, как только вы привыкнете к автоматическому подключению, объяснение каждой службы становится проблемой.В качестве альтернативы вы можете использовать возможность автоконфигурирования для добавления тега контроллера к выбранным классам.Начните с объявления пустого интерфейса, и пусть ваши контроллеры реализуют его:

interface ControllerInterface {}

class SomeController implements ControllerInterface

Затем настройте src / Kernel.php

# src/Kernel.php
class Kernel {
    protected function build(ContainerBuilder $container)
    {
        $container->registerForAutoconfiguration(ControllerInterface::class)
            ->addTag('controller.service_arguments');

Конечно, это просто решает проблему с контроллером.Вероятно, вы столкнетесь с рядом других проблем, связанных с автопроводкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...