Ошибка неиспользуемой привязки при попытке привязать регистратор к конструктору контроллера с автопроводкой в ​​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 для того, чтобы вручную установить аргументы. Это должно быть хорошо, я думаю; у вас должна быть возможность автоматического и ручного подключения в сервисном контейнере, верно?

0 ответов

Другие вопросы по тегам