类似的问题已经在这里进行了几次,但不幸的是我无法找到那里需要的帮助。
我正在尝试在Symfony(3.1)中创建自定义扩展类。我正在关注食谱[1,2],但无论我尝试什么,我都会收到错误
YamlFileLoader.php第404行中的InvalidArgumentException:没有扩展能够加载“czechnology_tools”的配置(在[path_to_project] \ src \ Czechnology \ ToolsBundle \ DependencyInjection /../ Resources / config \ 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 :(得分: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';
}
希望它能解决问题。