![](/img/trans.png)
[英]Symfony2: is it possible to have a composer.json file inside a bundle?
[英]Symfony2 Composer Bundle Namespace
我试图通过composer导入自己的捆绑软件有一段时间,但遇到了一些问题。 我得到以下捆绑:
<?php
namespace Platform\Bundle\PollBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class PlatformPollBundle extends Bundle
{
}
该捆绑包位于vendor / platform / pollbundle /中 。
在“主要” composer.json中,我定义了用于自动加载的名称空间:
"autoload": {
"psr-0": {
"": "src/" ,
"Platform\\": "vendor/platform"
}
},
并从包中composer.json我definied:
{
"name" : "platform/pollbundle",
"type": "symfony-bundle",
"extra": {
"servicePath": ""
},
"autoload": {
"psr-0": {
"Platform\\Bundle\\PollBundle": ""
}
},
"target-dir": "pollbundle"
}
在autoload_namespaces中,正确存在以下行:
'Platform\\' => array($vendorDir . '/platform'),
但是我得到了错误:
Fatal error: Class 'Platform\Bundle\PollBundle\PlatformPollBundle' not found in ........Controller.php on line 13
我尝试了大约100种解决方案,但没有任何效果。 如果有人可以帮助我,那就太好了。
捆绑软件不是由作曲家加载的,而是由Symfony内核本身处理的。 在应用程序目录中,如下所示编辑AppKernel.php:
public function registerBundles()
{
$bundles = array(
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
...,
new Platform\Bundle\PollBundle\PlatformPollBundle()//<-- add this
);
}
同时,在app / autoload.php文件中,注册新的名称空间。 它曾经通过$loader
实例通过调用$loader->registerNameSpaces()
,但是现在,您必须在AnnotationRegistry
类上调用静态方法:
AnnotationRegistry::registerAutoloadNamespace('PollBundle', 'path/to/PollBundle');
我建议的一个漏洞修复程序,显然是为您解决了这个问题,它是在php app/console generate:bundle
运行php app/console generate:bundle
,生成具有相同名称的新包,然后只需替换该包的目录(在src中/)。
在主应用程序中为指向供应商文件夹的任何内容定义ANY自动加载是错误的! 那就是作曲家的目的。 Composer将读取其中包含的每个软件包的自动加载声明,并自动添加适当的自动加载。 无需自己添加。
即使您必须使用尚未添加composer.json文件的软件,也只有该软件包的自动加载才应该进入软件包定义块,而不是进入自动加载定义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.