Ошибка неиспользуемой привязки при попытке привязать регистратор к конструктору контроллера с автопроводкой в Symfony 3.4
После обновления до Symfony 3.4 с 2.8 я пытаюсь избавиться от предупреждений об использовании сервисов из контейнера. Одно зависание - мой контроллер все расширяется от абстрактного контроллера, которому нужен доступ к логологу монолога. Я решил использовать autwiring для моих контроллеров и добавил конструктор в базовый контроллер, который имеет LoggerInterface $logger
как единственный аргумент. Пытаясь настроить это один раз, я добавил переменную $ logger со ссылкой на службу logger в разделе bind services.yml.
Тем не менее, я продолжаю получать сообщение об ошибке:Unused binding "$logger" in service "security.authentication.failure_handler.secured_area.form_login"
Я полагаю, что эта ошибка должна появляться, только если ни у одной службы нет аргумента конструктора с таким именем переменной. Теперь я знаю, что все мои контроллеры имеют это в абстрактном классе, а также являются частью некоторых других моих служб, так что это кажется неправильным. Как я могу избавиться от этой ошибки?
Вот как выглядит мой services.yml:
services:
_defaults:
autowire: true
autoconfigure: true
public: false
bind:
$logger: "@logger"
$env: "%sys_env%"
_instanceof:
\Twig_Extension:
tags: ['twig.extension']
AppBundle\:
resource: '../../../../../../src/AppBundle/{Controller,Service,Twig}/*'
exclude: '../../../../../../src/AppBundle/Service/Exception/*'
# SECURITY ########################################################################
security.authentication.failure_handler:
class: AppBundle\Security\AuthenticationFailureHandler
autowire: false
arguments: ["@http_kernel", "@security.http_utils", {}, "@app.service.security", "@doctrine.orm.entity_manager", "@logger"]
tags:
- { name: 'monolog.logger', channel: 'security' }
ОБНОВЛЕНИЕ 1:
Я заметил, что в security.authentication.failure_handler
У меня есть ссылка на один из моих сервисов: app.service.security
, Я забыл объявить об этом ниже, поэтому я добавил следующее в services.yml:
app.service.security:
class: AppBundle\Service\SecurityService
Это избавило от ошибки логгера, однако теперь я вижу ошибку о строковой переменной $ env:
Unused binding "$env" in service "security.authentication.failure_handler.secured_area.form_login".
Меня беспокоит, что сообщение об ошибке не является настоящей ошибкой, а это красная сельдь. Варианты связывания кажутся немного странными. Любой совет приветствуется...
ОБНОВЛЕНИЕ 2:
Я решил избавиться от конфигурации bind и instanceof и настраиваю значения вручную, но теперь это ошибка: Cannot autowire service "app.service.security": argument "$sysInfoService" of method "AppBundle\Service\SecurityService::__construct()" references class "AppBundle\Service\SystemInfoService" but no such service exists. You should maybe alias this class to the existing "app.service.system_info" service.
Что странно, так это то, что я верю, что делаю именно то, что предлагает ошибка; Я добавил псевдонимы для предположительно автоматической проводной службы:
app.service.system_info:
class: AppBundle\Service\SystemInfoService
app.service.security:
class: AppBundle\Service\SecurityService
У меня есть некоторые сервисы, которые я объявляю вручную autowired: false
для того, чтобы вручную установить аргументы. Это должно быть хорошо, я думаю; у вас должна быть возможность автоматического и ручного подключения в сервисном контейнере, верно?