繁体   English   中英

Symfony2 Composer捆绑软件命名空间

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM