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 ?
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;
}
}
?>
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...
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');
}
}
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