Ошибка неиспользуемой привязки при попытке привязать регистратор к конструктору контроллера с автопроводкой в ​​Symfony 3.4 - PullRequest
0 голосов
/ 27 февраля 2019

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

...