本文介绍了没有能够加载配置的扩展的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试加载自定义配置但出现异常:

I'm trying to load custom config but getting exception:

1/2 YamlFileLoader.php 中的 InvalidArgumentException

没有能够加载配置的扩展cwiczenia"(在 ..\app/config\config.yml 中).看着对于命名空间cwiczenia",找到framework",安全",...

There is no extension able to load the configuration for"cwiczenia" (in ..\app/config\config.yml).Lookedfor namespace "cwiczenia", found "framework","security",...

2/2 FileLoaderLoadException

2/2 FileLoaderLoadException

没有能够加载cwiczenia"配置的扩展程序....

There is no extension able to load the configuration for "cwiczenia" ...

..\src\CwiczeniaDependencyInjectionBundle\DependencyInjection\Configuration.php

namespace CwiczeniaDependencyInjectionBundle\DependencyInjection;

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

class Configuration implements ConfigurationInterface{

public function getConfigTreeBuilder()
{
    $treeBuilder = new TreeBuilder();
    $rootNode = $treeBuilder->root('cwiczenia');
    
    $rootNode
        ->children()
            ->scalarNode('teamName')->end()
        ->end();
            
    return $treeBuilder;

..\src\CwiczeniaDependencyInjectionBundle\DependencyInjection\CwiczeniaExtension.php

namespace CwiczeniaDependencyInjectionBundle\DependencyInjection;

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

class CwiczeniaExtension extends Extension
{
    protected function load(array $configs, ContainerBuilder $container) 
    {
        $configuration = $this->getConfiguration($configs, $container);
        $config = $this->processConfiguration($configuration, $configs);
        
        $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('services.yml');
    }
    public function getAlias()
    {
        return 'cwiczenia';
    }

..\app\config\config.yml

cwiczenia:
    teamName: Lakers

应用内核

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 Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
            new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
            new AppBundle\AppBundle(),
            new SandersBundle\SandersBundle(),
            new CwiczeniaDependencyInjectionBundle\CwiczeniaDependencyInjectionBundle(),
        );

        if (in_array($this->getEnvironment(), array('dev', 'test'), true)) {
            $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
            $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($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml');
    }
}

如果我删除 Configuration.php,同样的异常

Same exception if I remove Configuration.php

推荐答案

你必须手动注册扩展类,这里描述如何去做 http://symfony.com/doc/current/cookbook/bundles/extension.html#manually-registering-an-extension-类

You have to manually register extension class, how to do it is described here http://symfony.com/doc/current/cookbook/bundles/extension.html#manually-registering-an-extension-class

像这样:

//.....
class CwiczeniaDependencyInjectionBundle extends Bundle
{

  public function getContainerExtension()
  {
    if (null === $this->extension) {
        $this->extension = new CwiczeniaExtension();
    }
    return $this->extension;
  }
}

这篇关于没有能够加载配置的扩展的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-30 07:10