2012-12-06 9 views
18

मैं अपने खुद के FacebookBundle बना सकते हैं औरकोई एक्सटेंशन "facebookbundle" symfony2

के लिए विन्यास लोड करने में सक्षम मैं यह त्रुटि आई है:

There is no extension able to load the configuration for "facebookbundle" (in /facebookx/app/config/config_dev.yml). Looked for namespace "facebookbundle", found "framework", "security", "twig", "monolog", "swiftmailer", "assetic", "doctrine", "sensio_framework_extra", "jms_aop", "jms_di_extra", "jms_security_extra", "d_facebook", "d_user", "d_security", "web_profiler", "sensio_distribution"

त्रुटि संदेश का अर्थ है कि मैं एक प्रविष्टि "facebookbundle मिला "मेरी config.yml में जिसका उपयोग किसी भी एक्सटेंशन द्वारा नहीं किया जाता है?

मेरे config.yml

facebookbundle: 
    file: %kernel.root_dir%/../src/FacebookBundle/Facebook/FacebookInit.php 
    alias: facebook 
    app_id: xxx 
    secret: xxx 
    cookie: true 
    permissions: [email, user_birthday, user_location, user_about_me] 

मेरे DFacebookExtension

<?php 

namespace D\FacebookBundle\DependencyInjection; 

use Symfony\Component\DependencyInjection\ContainerBuilder; 
use Symfony\Component\Config\FileLocator; 
use Symfony\Component\HttpKernel\DependencyInjection\Extension; 
use Symfony\Component\DependencyInjection\Loader; 

/** 
* This is the class that loads and manages your bundle configuration 
* 
* To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html} 
*/ 
class DFacebookExtension extends Extension 
{ 
    /** 
    * {@inheritDoc} 
    */ 
    public function load(array $configs, ContainerBuilder $container) 
    { 
     $configuration = new Configuration(); 
     $config = $this->processConfiguration($configuration, $configs); 

     $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); 
     $loader->load('services.yml'); 

     foreach (array('app_id', 'secret', 'cookie', 'permissions') as $attribute) { 
      $container->setParameter('facebookbundle.'.$attribute, $config[$attribute]); 
     } 

     if (isset($config['file']) && $container->hasDefinition('acebookbundle.api')) { 
      $facebookApi = $container->getDefinition('facebookbundle.api'); 
      $facebookApi->setFile($config['file']); 
     } 
    } 
} 

थे त्रुटि है?

उत्तर

17

आदेश कस्टम config मापदंडों के लिए स्वीकार करने के लिए आप के भीतर एक configuration.php वर्ग का उपयोग कर अपने बंडल विन्यास को परिभाषित करने के लिए है में आपका बंडल

src/FacebookBundle/DependencyInjection/configuration.php:

<?php 
namespace FacebookBundle\DependencyInjection; 

use Symfony\Component\Config\Definition\Builder\TreeBuilder; 
use Symfony\Component\Config\Definition\ConfigurationInterface; 

/** 
* This is the class that validates and merges configuration from your app/config files 
* 
* To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html#cookbook-bundles-extension-config-class} 
*/ 
class Configuration implements ConfigurationInterface 
{ 
    public function getConfigTreeBuilder() 
    { 
     $treeBuilder = new TreeBuilder(); 
     $rootNode = $treeBuilder->root('facebookbundle'); 

     $rootNode 
      ->children() 
       ->scalarNode('file')->defaultValue('')->end() 
       ->scalarNode('alias')->defaultValue('')->end() 
       ->scalarNode('app_id')->defaultValue('')->end() 
       ->scalarNode('secret')->defaultValue('')->end() 
       ->booleanNode('cookie')->defaultTrue()->end() 
       ->arrayNode('permissions') 
        ->canBeUnset()->prototype('scalar')->end()->end() 
      ->end() 
      ; 

     return $treeBuilder; 
    } 
} 
?> 
+0

okej, धन्यवाद। क्या अब मैं अपनी कक्षा में यह डेटा (आदि app_id, गुप्त) कैसे प्राप्त कर सकता हूं? –

+0

मैंने आपके मूल YML कॉन्फ़िगरेशन प्रारूप के आधार पर मूलभूत कॉन्फ़िगरेशन परिभाषा शामिल करने के लिए अपना उत्तर संपादित किया है। मैंने इसका परीक्षण नहीं किया है, इसलिए इसे थोड़ा tweaking की आवश्यकता हो सकती है। – lifo

+0

मेरा प्रश्न इस पर कुछ प्रकाश डाल सकता है - http: // stackoverflow।कॉम/प्रश्न/32482622/create-a-config-file-in-symfony2/32502618 # 32502618 – Peter

6

यह तब होता है जब आप अनुप्रयोग में बंडल शुरू करने के लिए भूल जाते हैं/AppKernel.php:

<?php 

use Symfony\Component\HttpKernel\Kernel; 
use Symfony\Component\Config\Loader\LoaderInterface; 

class AppKernel extends Kernel 
{ 

    public function registerBundles() 
    { 
     $bundles = array (
       new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), 
       new Symfony\Bundle\SecurityBundle\SecurityBundle(), 
       new Symfony\Bundle\TwigBundle\TwigBundle(), 
       new Symfony\Bundle\MonologBundle\MonologBundle(), 
       new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(), 
       new Symfony\Bundle\DoctrineBundle\DoctrineBundle(), 
       new Symfony\Bundle\AsseticBundle\AsseticBundle(), 
       new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), 
       new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(), 
       //... 
       new D\FacebookBundle\DFacebookBundle(), 
       //... 
    ); 

     if (in_array($this->getEnvironment(), array ('dev', 'test'))) 
     { 
     $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); 
     $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); 
     $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(); 
     } 

     return $bundles; 
    } 

    public function registerContainerConfiguration(LoaderInterface $loader) 
    { 
     $loader->load(__DIR__ . '/config/config_' . $this->getEnvironment() . '.yml'); 
    } 

} 
+0

नया एफओएस \ फेसबुकबंडल \ FOSFacebookBundle()? मैं अपना खुद का फेसबुकबंडल –

+0

कहां लिखता हूं, बेशक अपना खुद का बंडल! मुझे आपके स्रोत/फेसबुकबंडल/निर्भरता इंजेक्शन/कॉन्फ़िगरेशन.एफ़पी में एक संभावित गलती दिखाई देती है, नामस्थान उपसर्ग डी \ – AlterPHP

+0

याद करता है गलती जीवन के जवाब में है, यह सुनिश्चित नहीं है कि यह प्रासंगिक है .. – AlterPHP

42

इसके अलावा, कि विन्यास फाइल की जड़ कुंजी बंडल का नाम की एक सामान्यीकृत रूप में होना चाहिए ध्यान में रखना।

यह कुछ ऐसा है जो मैंने कुछ बार encoutered किया है और यदि आप इसके बारे में पता नहीं है तो हल करने के लिए यह बहुत निराशाजनक है।

उदाहरण: यदि बंडल को MyFirstAwesomeBundle कहा जाता है, तो फ़ाइल में रूट कुंजी my_first_awesome होना चाहिए। तो ऊंट-केस को सांप-केस में परिवर्तित कर दिया जाता है और शब्द "बंडल" को अनदेखा किया जाता है या हटा दिया जाता है।

तो बस अपनी फ़ाइल मिलान में रूट कुंजी होने से Configuration::getConfigTreeBuilder() में निर्दिष्ट मान पर्याप्त नहीं है।

यदि आप इस नियम का पालन नहीं करते हैं, तो आपको There is no extension able to load the configuration त्रुटि मिल जाएगी।


मुझे आशा है कि यह अगले हताश आत्मा जो इस पेज पर समाप्त होता है में मदद मिलेगी ...

+1

हां, इससे मुझे वास्तव में मदद मिली! :) – Tarun

+0

क्या आपकी बंडल निर्भरता निर्देशिका में 'आपका बंडल एक्सटेंशन' मौजूद है? कुछ मामलों में इस कारण से ** कॉन्फ़िगरेशन लोड करने में कोई एक्सटेंशन नहीं है ** त्रुटि होती है। –

+0

ओएमजी। तुम सुनहरे हो इस वजह से मेरे दिमाग को टक्कर लगी थी। –

1

यह त्रुटि भी अपने config की जड़ में एक लापता services कुंजी की वजह से हो सकता है:

services: 
    foo_bar.baz: 
     class: Foo\BarBundle\Service\BazService