После обновления до Symfony 3.4 с 2.8 я пытаюсь избавиться от предупреждений об использовании сервисов из контейнера.Одно зависание - мой контроллер все расширяется от абстрактного контроллера, которому нужен доступ к логологу монолога.Я решил использовать autwiring для своих контроллеров и добавил конструктор в базовый контроллер, который имеет LoggerInterface $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' }
UPDATE 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
, чтобы вручную установить аргументы.Это должно быть хорошо, я думаю;у вас должна быть возможность автоматического и ручного подключения в сервисном контейнере, верно?