没有可以加载“my_namespace”

时间:2016-07-13 20:24:46

标签: dependency-injection symfony

类似的问题已经在这里进行了几次,但不幸的是我无法找到那里需要的帮助。

我正在尝试在Symfony(3.1)中创建自定义扩展类。我正在关注食谱[12],但无论我尝试什么,我都会收到错误

  

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

所以似乎正确设置了扩展名,并使用了正确的别名。但是,我仍然无法克服异常。任何提示?

1 个答案:

答案 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';
}

希望它能解决问题。