没有扩展能够加载“my_bundle_name”的配置

Posted

技术标签:

【中文标题】没有扩展能够加载“my_bundle_name”的配置【英文标题】:There is no extension able to load the configuration for "my_bundle_name" 【发布时间】:2013-09-19 02:57:28 【问题描述】:

我知道这篇文章在这里很受欢迎,有很多关于这个问题的问题,但没有任何帮助我解决我的问题。这个我要问了。

我创建了一个名为“ATL15/GoogleAnalyticsBundle”的包。

我想从 app/config.yml 中获取用户参数;这是我的配置参数,我正在从 app/parameters.yml 加载参数。

atl15_google_analytics:
    client_id:  "%ga_client_id%"
    client_secret: "%ga_client_secret%"
    developer_key: "%ga_developer_key%"
    redirect_uri: "%ga_redirect_uri%"

我做了所有我从 symfony 文档书和网络上读到的东西。对我没有任何帮助...

这是我的DependencyInjection/Configuration.php 文件:

<?php

namespace ATL15\GoogleAnalyticsBundle\DependencyInjection;

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

class Configuration implements ConfigurationInterface

    public function getConfigTreeBuilder()
    
        $treeBuilder = new TreeBuilder();
        $rootNode = $treeBuilder->root('atl15_google_analytics');

        $rootNode->children()
                    ->scalarNode('client_id')->isRequired()->cannotBeEmpty()->end()
                    ->scalarNode('client_secret')->isRequired()->cannotBeEmpty()->end()
                    ->scalarNode('developer_key')->isRequired()->cannotBeEmpty()->end()
                    ->scalarNode('redirect_uri')->isRequired()->cannotBeEmpty()->end()
                 ->end();

        //var_dump($rootNode); die;

        return $treeBuilder;
    

这是我的DependencyInjection/ATL15GoogleAnalyticsBundleExtension.php 文件:

<?php

namespace ATL15\GoogleAnalyticsBundle\DependencyInjection;

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

class ATL15GoogleAnalyticsExtension 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'));

        foreach (array('config') as $basename) 
            $loader->load(sprintf('%s.yml', $basename));
        

        foreach (array('client_id', 'client_secret', 'developer_key', 'redirect_uri') as $attribute) 
            $container->setParameter($attribute, $config[$attribute]);
        
    

    public function getAlias()
    
        return 'atl15_google_analytics';
    

是的,我从 app/AppKernel.php 加载了这个包;

    new ATL15\GoogleAnalyticsBundle\ATL15GoogleAnalyticsBundle(),

每次我收到此错误时:

[2013 年 9 月 14 日星期六 17:37:24] [错误] [客户端 127.0.0.1] PHP 致命错误: 未捕获的异常 'Symfony\Component\DependencyInjection\Exception\InvalidArgumentException' 带有消息'没有扩展能够加载配置 “atl15_google_analytics”(在 /var/www/vsy-bio/src/ATL15/GoogleAnalyticsBundle/DependencyInjection/../Resources/config/config.yml)。 寻找命名空间“atl15_google_analytics”,在 /var/www/vsy-bio/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php:290\nStack 跟踪:\n#0 /var/www/vsy-bio/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php(260): Symfony\Component\DependencyInjection\Loader\YamlFileLoader->validate(Array, '/var/www/vsy-bi...')\n#1 /var/www/vsy-bio/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php(44): Symfony\Component\DependencyInjection\Loader\YamlFileLoader->loadFile('/var/www/vsy-bi...')\n#2 /var/www/vsy-bio/src/ATL15/GoogleAnalyticsBundle/DependencyInjection/ATL15GoogleAnalyticsExtension.php(28): Symfon 在 /var/www/vsy-bio/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php 在第 290 行

你能帮帮我吗?

【问题讨论】:

看起来像是错字。尝试将 "ATL15GoogleAnalyticsBundleExtension.php" 重命名为 "ATL15GoogleAnalyticsExtension.php" 对不起,正确的名称是 ATL15GoogleAnalyticsExtension。 【参考方案1】:

从您的ATL15GoogleAnalyticsExtension 和您的错误来看,您似乎正在从使用app\config\config.yml 中所述参数的捆绑资源\配置中加载一个名为config.yml 的文件。

文件ATL15/GoogleAnalyticsBundle/DependencyInjection/../Resources/config/config.yml 应该只包含两个命名空间parametersservices like...

parameters:
    atl15_google_analytics.something.class: ATL15/GoogleAnalyticsBundle...

services:
    atl15_google_analytics.something.services:
        class: %atl15_google_analytics.something.class%

配置数据由$config = $this-&gt;processConfiguration($configuration, $configs); 传递到扩展文件而不是您需要调用文件本身,因此您不需要加载Resources/config/config.yml,除非它实际上包含任何内部服务或您的包的参数.

【讨论】:

配置文件中的参数不会有默认数据。用户应该在 app/config.yml 中定义他们的值。我的包的 config.yml 中只有必需的参数。 您的Resources/config/config.yml 的布局是否如上或类似于app/config/config.yml 的布局,您的包别名作为命名空间? 当我在我的 app/config/config.yml 中复制而没有值只是键入“”时,我会收到此错误。现在是空的。 我不确定这意味着什么。 app/config/config.yml 应该有你所有的 symfony 设置,比如 github.com/symfony/symfony-standard/blob/master/app/config/… 。如果它是空的,那么您将遇到其他问题,例如没有数据库连接参数或框架设置。 我的错。这不是 app/config/config.yml 它是捆绑包的 config.yml。有空啊兄弟对不起。【参考方案2】:

有一个foreach是多余的:

foreach (array('config') as $basename) 
    $loader->load(sprintf('%s.yml', $basename));

除非你的包的 Resources 文件夹中有一个 config.yml 文件,并且你知道你在做什么,否则删除这个 foreach。您提供的堆栈跟踪中的行号与您的源代码不匹配,所以我猜您后来对其进行了编辑,但我认为错误来自此 config.yml 文件。

你不必调用 $loader->load(),为了从 app/config.yml 中读取参数,它是自动完成的。

【讨论】:

【参考方案3】:

错误是扩展类文件的名称以及它需要匹配捆绑包的类名:

应该是GoogleAnalyticsExtension而不是ATL15GoogleAnalyticsBundleExtension,文件名需要是GoogleAnalyticsExtension.php,并将atl15_google_analytics改为google_analytics

【讨论】:

这是incorrect。演示包名为 AcmeDemoExtension 而不是 DemoExtension 捆绑包名称是 GoogleAnalytics 而不是 ATL15GoogleAnalytics,我以捆绑包命名所有内容,为我工作 I created a bundle named "ATL15/GoogleAnalyticsBundle". 尝试运行php app/console -n generate:bundle --namespace="ATL15/GoogleAnalyticsBundle"。生成的 DependencyInjection 文件夹命名为ATL15GoogleAnalyticsExtension 对不起,我明白你的意思,这对我有用,我试过了。 我认为这可能与命名空间有关,因为他的所有内容都大写,我认为这可能是问题所在。我相信我的建议会奏效,从包名和其他类名中删除命名空间名称。

以上是关于没有扩展能够加载“my_bundle_name”的配置的主要内容,如果未能解决你的问题,请参考以下文章

LexikJWTAuthenticationBundle - 没有扩展能够加载“api_login_check”的配置

Symfony 3 OneUp Flysystem 错误:没有扩展能够加载“oneup_flysystem”的配置

在 Visual Studio 2015 中调试本机应用程序加载的托管 DLL

无法通过 chrome 扩展与 iFrame 交互

命令行 chrome 扩展加载和测试

Chrome 扩展:在加载的 Dom 上注入脚本