没有扩展能够加载“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
应该只包含两个命名空间parameters
和services
like...
parameters:
atl15_google_analytics.something.class: ATL15/GoogleAnalyticsBundle...
services:
atl15_google_analytics.something.services:
class: %atl15_google_analytics.something.class%
配置数据由$config = $this->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”的配置