2012-03-21 20 views
2

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のような他のバンドルと比較しました。

答えて

1

まず、Ms2474AuthNetExtensionではなく、Ms2474AuthNetBundleExtensionと呼びます。

第2に、拡張のカスタム名前空間を設定して手動で読み込まない限り、構成オプションはauthorize_netではなくms2474_auth_netである必要があります。

関連する問題