私はMicroKernelを持つアプリを持っており、アプリケーションがかなり汎用的で、できるだけ外部に設定したいので、SymfonyのTreeBuilderをカスタム設定で使いたいと考えています。私AppKernel
でsymfony MicroKernelのカスタム設定名前空間を登録します
<?php
namespace App\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\DependencyInjection\ConfigurableExtension;
class AppExtension extends ConfigurableExtension
{
// note that this method is called loadInternal and not load
protected function loadInternal(array $mergedConfig, ContainerBuilder $container)
{
dump($mergedConfig);
}
public function getAlias()
{
return 'research';
}
}
:
<?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('research');
// @formatter:off
$rootNode
->children()
->arrayNode('questions')
->children()
->integerNode('client_id')->end()
->scalarNode('client_secret')->end()
->end()
->end()// twitter
->end();
// @formatter:on
return $treeBuilder;
}
}
と私AppExtension
:私はこのConfiguration
クラスを持っている
There is no extension able to load the configuration for "research"
(in /var/www/html/src/app/config/config.yml). Looked for
namespace "research", found "framework", "twig",
"sensio_framework_extra", "web_profiler"
:私の問題は、私は私のカスタムnamespace
はsymfonyのために登録を取得することはできませんクラス、私はこのような拡張子を初期化しています。結果として私はdump($mergedConfig)
から出力を取得します。私元research.yml
<?php
namespace App;
use App\DependencyInjection\AppExtension;
use Doctrine\Common\Annotations\AnnotationRegistry;
use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
use Symfony\Component\Config\Loader\LoaderInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Routing\RouteCollectionBuilder;
use Symfony\Component\Yaml\Exception\ParseException;
use Symfony\Component\Yaml\Yaml;
$loader = require __DIR__ . '/../vendor/autoload.php';
// auto-load annotations
AnnotationRegistry::registerLoader(array($loader, 'loadClass'));
/**
* Class AppKernel
*/
class AppKernel extends Kernel
{
use MicroKernelTrait;
...
protected function configureContainer(ContainerBuilder $c, LoaderInterface $loader)
{
$researchConfig = Yaml::parse(file_get_contents(__DIR__ . '/config/research.yml'));
$appExtension = new AppExtension();
$appExtension->load(researchConfig, $c);
$loader->load(__DIR__ . '/config/config.yml');
}
...
}
から私のAppExtension
でLLはそれにもかかわらず、私のconfig.yml
はこのように見えるとき、私は上記のエラーを取得:
framework:
secret: S0ME_SUPER_SECRET
profiler: { only_exceptions: false }
research:
questions:
client_id: 2342323423
clent_secret: mysecret
ので、私は、何をすべきかが必要です実際に私の名前空間を登録してください私はそれを正しく上書きすることができますか?または、は外部ベンダーバンドルにを持っていますか?
あなたがやっていることを試したことはありませんが、バンドルを作る必要があると私は確信しています。 1つのバンドルクラスだけが必要です。 – Cerad
はい、sf 3.3まではバンドルでなければなりません。それ以外の場合は認識されません。ありがとうございます – con