Я работаю над переносом существующего проекта Symfony 2.8
на Symfony 3.4
.В этом процессе я хотел бы использовать autowire
для автоматической настройки / настройки служб.
Исходя из SF 2, мой проект по-прежнему организован в разных пакетах, и поэтому я использую разные services.yml
файлы.
Кажется, что настройки из проектов services.yml
не применяются (полностью) к конкретным services.yml
пакетным файлам. Интересно, ожидается ли это или что-то не так с моей конфигурацией.
Конкретная проблема:
// app/config/config.yml
imports:
- { resource: "@AppBundle/Resources/config/services.yml" }
...
// app/config/services.yml
services:
_defaults:
autowire: true
autoconfigure: true
public: false
bind:
$debug: '%kernel.debug%'
// src/AppBundle/Resources/config/services.yml
services:
AppBundle\Controller\CustomExceptionController:
public: true
#autowire: true
#arguments:
# $debug: '%kernel.debug%'
// AppBundle\Controller\CustomExceptionController
class CustomExceptionController extends ExceptionController {
public function __construct(\Twig_Environment $twig, $debug) {
parent::__construct($twig, $debug);
....
}
}
CustomExceptionController
работает только тогда, когда служба определена как public
.Поскольку _defaults
настроены на создание private
сервисов, это должно быть определено вручную.Поскольку контроллер принадлежит AppBundle
, я бы (пока) хотел бы сохранить этот конфиг в связках service.yml
Однако, только применение public: true
НЕ работает :
Ошибка типа: слишком мало аргументов для функции AppBundle \ Controller \ CustomExceptionController :: __ construct (), 0 передано в ... / project / var / cache / dev / ContainerW0i3edc / getCustomExceptionControllerService.php в строке11 и ровно 2 ожидаемых
Хотя в сообщении упоминается кэш, это не проблема кеширования (удаление папок и восстановление кеша ничего не меняет).
Только если я добавлю autowire: true
к определению конкретной службы, autowire попытается настроить службу.Тем не менее я получаю следующее сообщение:
Невозможно автоматически подключить службу "AppBundle \ Controller \ CustomExceptionController": аргумент "$ debug" метода "__construct ()" не имеет подсказки типа, вам следует настроитьего значение явно.
Так как $debug
связан с app/config/services.yml
, это не может быть проблемой, не так ли? Однако, это работает, только если я явноустановите аргумент в src/AppBundle/Resources/config/services.yml
.
Почему autowire: true
не применяется к сервисам, определенным в комплекте services.yml
?
Почемупривязка из проекта services.yml
не применяется к службам, определенным в комплекте services.yml
?
Ожидаемое поведение или что-то не так с моей конфигурацией?