symfony2フレームワーク用のサードパーティ製バンドルを構築する過程で、app/config.ymlファイルで設定を行うことができないという問題が発生しました。私はこれをしたいので、バンドルのユーザ(主に私自身)は設定変更を行うためバンドルに入る必要はありません。セマンティックコンフィグレーションを公開する方法
マイバンドルConfiguration.phpファイルの読み取り:
<?php
namespace Ms2474\AuthNetBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\NodeBuilder;
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('authorize_net');
$rootNode
->children()
->scalarNode('login_id')->defaultNull()->end()
->scalarNode('transaction_key')->defaultNull()->end()
->booleanNode('sandbox')->defaultValue(true)->end()
->scalarNode('log_file')->defaultValue(false)->end()
->end();
return $treeBuilder;
}
}
バンドル拡張ファイル(Ms2474AuthNetBundleExtension.php)を読み取ります
<?php
namespace Ms2474\AuthNetBundle\DependencyInjection;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\Config\Definition\Processor;
class Ms2474AuthNetBundleExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
$processor = new Processor();
$configuration = new Configuration();
$config = $processor->process($configuration->getConfigTree(), $configs);
if (null === $config['sandbox']) {
$config['sandbox'] = $container->getParameter('kernel.debug');
}
$container->setParameter('authorize_net.login_id', $config['login_id']);
$container->setParameter('authorize_net.transaction_key', $config['transaction_key']);
$container->setParameter('authorize_net.sandbox', $config['sandbox']);
if (isset($config['log_file'])) {
$container->setParameter('authorize_net.log_file', $config['log_file']);
}
$loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
}
}
:
次のものをapp/confiに追加しようとするとg.ymlファイル:
authorize_net:
login_id: 1234
transaction_key: 1234
sandbox: true
log_file: false
私は、次の2つのエラーを取得:
InvalidArgumentException: There is no extension able to load the configuration for "authorize_net" (in /path/to/app/config/config.yml). Looked for namespace "authorize_net", found "framework", "security", "twig", "monolog", "swiftmailer", "assetic", "doctrine", "sensio_framework_extra", "jms_security_extra", "jms_aop", "fos_user", "jms_serializer", "fos_rest", "stof_doctrine_extensions", "vich_uploader", "gri_user", "gri_campaign", "gri_authorized_contact", "web_profiler", "sensio_distribution"
と:
FileLoaderLoadException: Cannot import resource "/path/to/app/config/config.yml" from "/path/to/app/config/config_dev.yml".
質問:
は私が間違って何をやっていますここに?私はdocumentationを見て、私のコードをFOSUserBundleのような他のバンドルと比較しました。