我正在尝试通过作曲家导入自己的包但我遇到了一些问题。我得到了以下捆绑:
<?php
namespace Platform\Bundle\PollBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class PlatformPollBundle extends Bundle
{
}
该捆绑包位于 vendor / platform / pollbundle / 。
在“main” composer.json 中,我确定了自动加载的命名空间:
"autoload": {
"psr-0": {
"": "src/" ,
"Platform\\": "vendor/platform"
}
},
并在我确定的包中的 composer.json 中:
{
"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种解决方案,但没有任何效果。如果有人可以帮助我会很棒。
答案 0 :(得分:1)
捆绑包不是由作曲家加载的,而是由Symfony内核本身处理。在app目录中,像这样编辑AppKernel.php:
public function registerBundles()
{
$bundles = array(
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
...,
new Platform\Bundle\PollBundle\PlatformPollBundle()//<-- add this
);
}
同时在app / autoload.php文件中注册新的namesepace。过去通过调用$loader
通过$loader->registerNameSpaces()
实例完成,但现在,您必须在AnnotationRegistry
类上调用静态方法:
AnnotationRegistry::registerAutoloadNamespace('PollBundle', 'path/to/PollBundle');
我建议的一个hacky修复,显然是为你修复的,是在控制台中运行php app/console generate:bundle
,生成一个具有相同名称的新包,然后简单地替换该包&#39; s目录(在src /中)和你的包。
答案 1 :(得分:0)
在主应用程序中为任何指向vendor文件夹的内容定义任何自动加载是错误的!这就是作曲家的用武之地。 Composer将读取其中包含的每个包的自动加载声明,并自动添加适当的自动加载。没有必要自己添加。
即使您必须使用尚未添加composer.json文件的软件,只有该软件包的自动加载应该进入软件包定义块,而不是自动加载定义。