2016-07-13 161 views
1

类似的问题已经在这里几次了,但不幸的是,我无法找到在那里需要的帮助。没有扩展能够加载“my_namespace”的配置

我想在Symfony(3.1)中创建一个自定义扩展类。我下面的食谱[12]但无论我怎么努力,我得到的错误在YamlFileLoader.php线404

InvalidArgumentException:没有扩展能够加载配置“czechnology_tools”(以[path_to_project] \ SRC \ Czechnology \ ToolsBundle \ DependencyInjection /../资源/配置\ holidays.yml)。看着命名空间 “czechnology_tools”,结果一无所获

CzechnologyToolsExtension

<?php 

namespace Czechnology\ToolsBundle\DependencyInjection; 

// use ... 

class CzechnologyToolsExtension extends Extension 
{ 
    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('holidays.yml'); 
    } 
} 

,并在同一目录下相应的Configuration.php

<?php 

namespace Czechnology\ToolsBundle\DependencyInjection; 

// use ... 

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

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

     return $treeBuilder; 
    } 
} 

在YAML文件,我现在只是有虚拟内容,试图让它工作。 holidays.yml

czechnology_tools: 
    calendar: foo 

如果我尝试在控制台中进行调试,我得到这个:

$ bin/console config:dump-reference czechnology_tools 
# Default configuration for extension with alias: "czechnology_tools" 
czechnology_tools: 
    calendar:    default 

所以这似乎是扩展设置正确,用正确的别名。但是,我仍然无法克服这个例外。任何提示?

+0

是您在AppKernel中启用的包。 ? ... – Drmjo

+0

@Dmm是的,该软件包在Kernel中注册,并且其中的所有服务都正常工作。 – Czechnology

+0

您可以尝试找出配置名称。我遇到过很多次了,大部分时间symfony都期待着一个不同的名字。尝试在app/config.yml中设置配置'czechnology_tools'。暂时加载'holidays.yml'的行注释。现在你会得到类似''查找命名空间“czechnology_tools”的错误,找到<注册命名空间列表>'。在注册的命名空间中查找您的配置名称。 – Broncha

回答

0

我的猜测是,某个地方是你的包体系结构,有一个错字(可能是故意的,一个包名与扩展名不同,......)。

首先,运行bin/console debug:config,为了看看你的包会出现一个不同的别名你试图使用一个,你应该有一个包含一条线,看起来像一个输出:

CzechnologyToolsBundle | [好别名】

如果它不会出现在所有的,以下内容添加到您的包类:

namespace Czechnology\ToolsBundle; 

use Czechnology\ToolsBundle\DependencyInjection\CzechnologyToolsExtension; 

class CzechnologyToolsBundle extends Bundle 
{ 
    public function getContainerExtension() 
    { 
     return new CzechnologyToolsExtension(); 
    } 
} 

另外,将以下方法添加到您的包扩展名:

/** 
* {@inheritdoc} 
*/ 
public function getAlias() 
{ 
    return 'czechnology_tools'; 
} 

希望它解决了这个问题。

+0

初始化wayy高谢谢你的提示。控制台命令的输出与我在上面注释中发布的输出相同,是的,我的包的别名在那里。我也尝试过'getAlias()'方法,没有任何帮助。我也尝试在那里添加'getContainerExtension()'方法,但仍然得到相同的错误。 – Czechnology

相关问题