У меня есть некоторые проблемы при работе с комбинацией PHP-DI 6 и Symfony 4. Поэтому я хотел бы получить более глубокое понимание того, как это работает / должно работать, и проверить, действительно ли я правильно настроил это.
Symfony по умолчанию использует свой собственный контейнер внедрения зависимостей, symfony/dependency-injection
. В App\Kernel
есть метод-ловушка configureContainer(...)
. В этом методе можно настроить DIC. Еще одним местом для конфигурации DIC является файл services.yaml
.
Теперь я устанавливаю php-di/php-di
и php-di/symfony-bridge
и настраиваю их в App\Kernel#buildPHPDIContainer(...)
, как в В документе PHP-DI поясняется:
/*
Cannot use ContainerBuilder as in the PHP-DI docu,
since its already in use by the AppKernel\configureContainer(...).
*/
use DI\ContainerBuilder as PhpDiContainerBuilder;
class AppKernel extends \DI\Bridge\Symfony\Kernel
{
// ...
protected function buildPHPDIContainer(PhpDiContainerBuilder $builder)
{
$builder->addDefinitions('/path/to/file/returning/definitions/array.php');
return $builder->build();
}
}
Теоретическая часть:
Что происходит/должно происходить после него? Symfony DIC становится неактивным? Если нет, означает ли это, что приложение одновременно использует два DIC? Имеет ли смысл отключать DIC Symfony?
В общем: какова идея/подход PHP-DI Symfony Bridge -- заменить DIC фреймворка или интегрировать себя в него?
Практическая часть:
Выше я описал шаги настройки, чтобы заставить PHP-DI работать с Symfony. Есть ли что-то еще? Например. должен ли AppKernel\configureContainer(...)
оставаться как есть или он должен стать прокси для AppKernel\buildPHPDIContainer(...)
PHP-DI? Следует ли удалить services.yaml
?