ここに記載されているドキュメントに従って、アプリにyaml構成ファイルをインポートしようとしています http://symfony.com/doc/current/bundles/extension.html しかし、常にエラーメッセージが表示されます。
「アプリ」の構成をロードできる拡張機能はありません
私のファイルはここにあります:config/packages/app.yamlそして次の構造を持っています:
app:
list:
model1:
prop1: value1
prop2: value2
model2:
...
これは単純なアプリであるため、すべてのファイルはsrc/
にあります。だから私はsrc/DependencyInjection/AppExtension.phpを持っています
<?php
namespace App\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader;
class AppExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
}
}
そしてsrc/DependencyInjection/Configuration.php
<?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');
// Node definition
$rootNode
->children()
->arrayNode('list')
->useAttributeAsKey('name')
->requiresAtLeastOneElement()
->prototype('array')
->children()
->requiresAtLeastOneElement()
->prototype('scalar')
->end()
->end()
->end()
->end()
->end();
return $treeBuilder;
}
}
パラメータにアクセスできません:(
何か案が?
カスタム構成ファイルをロードして、拡張クラス(Symfonyバンドル拡張のようにバンドルを作成せずに)を使用してパラメーターを処理する場合は、最終的に「作成」し、その1つ以上を「コンテナ」に追加します(コンパイルされる前に)、Extensionクラスを手動で登録できます。 Kernel.php
ファイルに含まれるconfigureContainer
メソッド:
protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader)
{
// to avoid the same error you need to put this line at the top
// if your file is stored under "$this->getProjectDir().'/config'" directory
$container->registerExtension(new YourAppExtensionClass());
// ----- rest of the code
}
その後、通常どおりパラメータを使用できます コンパイラパスの登録 。
お役に立てれば。