Symfony2的:没有扩展能够加载配置(Symfony2: There is no extensi

2019-08-31 15:10发布

我建立一个扩展,从所有已安装的加载包配置文件。

我的分机是这样的:

namespace Acme\MenuBundle\DependencyInjection;
// use ...
use Acme\MenuBundle\DependencyInjection\Configuration;

class AcmeMenuExtension extends Extension {
    public function load(array $configs, ContainerBuilder $container) {

        $configuration = new Configuration();
        $config = $this->processConfiguration($configuration, $configs);

        $finder = new \Symfony\Component\Finder\Finder();
        $finder
            ->directories()
            ->in($container->getParameter('kernel.root_dir') . '/../src/*/*Bundle/Resources')
            ->path('config');

        $possibleLocations = array();
        foreach ($finder as $c_dir) {
            $possibleLocations[] = $c_dir->getPathName();
        }

        $loader = new Loader\YamlFileLoader($container, new FileLocator($possibleLocations));
        $loader->load('menu.yml');
    }
}

再有就是我的(很简单)配置类:我将在未来增加更复杂的树,但现在我想它这个工作:

namespace Acme\MenuBundle\DependencyInjection;
// use ...

class Configuration implements ConfigurationInterface {  
    public function getConfigTreeBuilder() {
        $treeBuilder = new TreeBuilder();
        $rootNode = $treeBuilder->root('mw_menu'); 

        $rootNode
            ->children()
                ->scalarNode('mw_menu')->defaultValue('')->end()
            ->end(); 

        return $treeBuilder;
    }
}

为了测试我只放在“menu.yml”文件中的当前MenuBundle \资源\ CONFIG这个里面的内容:

# file: src\Acme\MenuBundle\Resource\config\menu.yml
mw_menu: "some teststring"

对于手动测试我使用testAction在默认控制器,它实际上什么也不做,但呈现一个空的模板。

无论如何,我得到这个错误:

InvalidArgumentException: There is no extension able to load the configuration for     
"mw_menu" (in {path to symfony}/app/../src/Acme/MenuBundle/Resources\config\menu.yml).
Looked for namespace "mw_menu", found none

我该如何解决呢?

从我目前了解,Symfony的注意到在配置文件中的关键“mw_menu”,但无法找到匹配的配置。

:我沿着食谱的文章曾如何公开语义配置?

请注意:我知道KNP菜单捆绑和类似捆绑的,但我确实想实现一个菜单自己。

此外,我发现了这个通知。 他是正确的?

Answer 1:

这是因为你的代码:

$rootNode = $treeBuilder->root('mw_menu'); 

$rootNode
    ->children()
    ->scalarNode('mw_menu')->defaultValue('')->end()
    ->end();

意味着该配置文件应该是这样的:

mw_menu: 
    mw_menu: "some teststring" 

一个例子:

更具体地讲,您需要将您的代码适应任何你想要的节点。 一般来说,人们采用通用的根,像mw_menu和类似然后二次值database_driver在下面的例子:

$rootNode = $treeBuilder->root('mw_menu'); 

$rootNode
    ->children()
    ->scalarNode('database_driver')->defaultValue('orm')->end()
    ->end();

然后看起来像这样的配置文件:

mw_menu: 
    database_driver: mongo_db


文章来源: Symfony2: There is no extension able to load the configuration for