Il n'y a pas d'extension capable de charger la configuration pour "facebookbundle" symfony2

Je crée mon propre FacebookBundle et

J'ai eu cette erreur:

Il N'y a pas d'extension capable de charger la configuration pour "facebookbundle" (dans /facebookx/app/config/config_dev.yml). Cherché l'espace de noms "facebookbundle" trouvé "cadre", "sécurité", "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"

Le message d'erreur signifie que j'ai reçu une entrée "facebookbundle" dans ma configuration.yml qui n'est utilisé par aucune extension ?

Ma 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]

Mon DFacebookExtension

<?php

namespace DFacebookBundleDependencyInjection;

use SymfonyComponentDependencyInjectionContainerBuilder;
use SymfonyComponentConfigFileLocator;
use SymfonyComponentHttpKernelDependencyInjectionExtension;
use SymfonyComponentDependencyInjectionLoader;

/**
 * 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 LoaderYamlFileLoader($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']);
        }
    }
}

Étaient Est erreur ?

24
demandé sur Radu Murzea 2012-12-06 14:29:23

4 réponses

Pour que les paramètres de configuration personnalisés soient acceptés, vous devez définir la configuration de votre bundle à l'aide d'une Configuration.classe php dans votre bundle.

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;
    }
}
?>
20
répondu lifo 2012-12-10 13:53:41

Gardez également à l'esprit que la clé racine du fichier de configuration doit être une forme normalisée du nom du Bundle.

C'est quelque chose que j'ai encouter à quelques reprises et c'est très frustrant de résoudre si vous n'êtes pas au courant.

Exemple: si bundle est appelé MyFirstAwesomeBundle, la clé racine du fichier doit être my_first_awesome. Ainsi, camel-case est converti en snake-case et le mot "bundle" est ignoré ou retiré.

Donc simplement avoir la clé racine dans votre fichier correspond exactement la valeur spécifiée dans Configuration::getConfigTreeBuilder() n'est pas assez.

Si vous ne suivez pas cette règle, vous obtiendrez l'erreur There is no extension able to load the configuration.


J'espère que cela aidera la prochaine âme désespérée qui finira sur cette page...

55
répondu Radu Murzea 2016-02-19 12:18:07

Cela se produit lorsque vous oubliez de démarrer le bundle dans app / 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');
   }

}
8
répondu AlterPHP 2012-12-06 12:18:21

Cette erreur peut également être causée par une clé services manquante ou invalide à la racine de votre configuration. Cela devrait ressembler à ceci:

services:
    foo_bar.baz:
        class: Foo\BarBundle\Service\BazService
3
répondu Jonathan 2018-10-03 22:12:47