Ошибка в встроенном контроллере, когда нет автопроводки - PullRequest
1 голос
/ 01 июня 2019

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

<service id="blah\blah\SecurityController">
    <argument type="service" id="security.authentication_utils"/>
    <tag name="controller.service_arguments"/>
    <tag name="container.service_subscriber"/>
</service>

Аргумент безопасности заключается в том, что я использую authenticationUtils-> getLastAuthenticationError () в методе входа в систему.

Однако такое определение службы вызывает ошибку устаревания. User Deprecated: Auto-injection of the container for "blah\blah\SecurityController" is deprecated since Symfony 4.2. Configure it as a service instead. at /var/www/html/vendor/symfony/framework-bundle/Controller/ControllerResolver.php:64)

Если я просто добавлю autowire="true" к определению сервиса выше, ошибка исчезнет (и в этот момент мне не нужен этот существующий аргумент). Тем не менее, я хотел бы следовать рекомендациям Symfony относительно явной конфигурации.

Чего мне не хватает, что происходит автоинъекция, когда для autowire установлено значение true, которое мне нужно явно включить?

1 Ответ

2 голосов
/ 01 июня 2019

Исходя из устаревания, я предполагаю, что ваш контроллер расширяет AbstractController.

Существует два возможных подхода для решения этой проблемы:

  1. Если вы используете функциональность изAbstractController вообще нет или только еле можно просто ничего не расширять.Если вы используете, например, только одну функцию из AbstractController, вы можете решить повторно реализовать ее, чтобы уменьшить ваши зависимости.Это также упоминается в официальных документах .

  2. Если вы хотите продолжать расширять AbstractController, вам необходимо внедрить контейнер вручную.Например, вот так:

services.xml

<service id="App\Controller\FooController">
    <call method="setContainer">
        <argument type="service" id="service_container"/>
    </call>
</service>

FooController.php

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