Это для Symfony 4.
Мне нужно реализовать приложение (не пакет), параметры конфигурации с помощью DependencyInjection \ Configuration и DependencyInjection \ AppExtension.
Я создал оба класса, как и для связки. Пространство имен для каждого - App \ DependencyInjection.
Имена файла и класса - Configuration и AppExtension, соответственно, находятся в src / DependencyInjection /.
В настоящее время Конфигурация просто определяет два скалярных узла для простоты.
// src/DependencyInjection/Configuration.php
namespace App\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
class Configuration implements ConfigurationInterface
{
public function getConfigTreeBuilder( )
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root( 'app' );
$rootNode
->addDefaultsIfNotSet()
->children()
->scalarNode( 'a1' )
->defaultValue( 'I am the default value for a1' )
->end()
->scalarNode( 'a2' )
->defaultValue( 'I am the default value for a2' )
->end()
->end();
return $treeBuilder;
}
}
Класс AppExtension реализует два метода: __construct () и load ().
Метод __construct () просто повторяет имя своего метода.
В настоящее время метод load () умирает (__METHOD__); просто чтобы убедиться, что я знаю, называется ли он. Это не так.
// src/DependencyInjection/AppExtension.php
namespace App\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\Extension;
class AppExtension extends Extension
{
public function __construct()
{
echo __METHOD__ . "()\n";
}
public function load( array $configs, ContainerBuilder $container )
{
die( __METHOD__ );
}
}
Я также создал файл конфигурации:
# config/app.yml
app:
a1: 'A one'
a2: 'A two'
Ответ на этот вопрос указывает, что мне нужно включить вызов $ container-> registerExtension () в метод configureContainer () моего файла src / kernel.php, поэтому я добавил это.
protected function configureContainer( ContainerBuilder $container, LoaderInterface $loader )
{
$container->registerExtension( new AppExtension() );
...
}
Когда я запускаю команду console cache: clear, вызывается конструктор AppExtension, но никогда не вызывается метод load ().
Выполнение команды console debug: config app приводит к этой ошибке:
Нет расширений с конфигурацией, доступной для "приложения".
Что мне не хватает?
TIA