Ошибка подписчика службы в примере пакета basi c Symfony 5 - PullRequest
0 голосов
/ 17 апреля 2020

Я создаю базовый c пример комплекта в Symfony 5. Я получаю эту ошибку:

"Mine\MyBundle\Controller\LuckyController" has no container set, did you forget to define it as a service subscriber?

Вы можете найти код в этом репозитории github: https://github.com/karimmtl/Mysymfony5

Кажется, я все еще что-то упускаю. Вот мой конфиг / связки. php содержание:

<?php

return [
    Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
    Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true],
    Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true],
    Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true],
    Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true],
    Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true],
    Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true],
    Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
    Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true],
    Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true, 'test' => true],
    Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true],

    Mine\MyBundle\MineMyBundle::class => ['all' => true],
];

1 Ответ

0 голосов
/ 17 апреля 2020

Прежде чем начать, я бы предложил вам go в документации: Symfony Связки

Теперь перейдем к вашей проблеме: Если вы видите проект, созданный symfony , вы обнаружите, что контроллеры по умолчанию выставляются как сервисы, этого можно достичь, определив запись в файле services.yaml в config. Этот конфиг позволяет контроллерам выставлять себя в контейнер:

# controllers are imported separately to make sure services can be injected
# as action arguments even if you don't extend any base controller class
App\Controller\:
    resource: '../src/Controller'
    tags: ['controller.service_arguments']

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

Редактировать: для частных пакетов вы можете использовать функции автоматической проводки, но Если вы создаете пакет, который может использоваться как сторонний пользователь, вы должны явно определить и пометить каждый контроллер и другие сервисы, чтобы минимизировать конфликты автопроводки. Это стандартная практика загрузки конфигурации пакета в основное приложение.

Подробнее об автоматической проводке

Подробнее о тегах обслуживания

Службы извлечения и зависимости контроллера

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