包括子树中的Symfony包:如何扩展自动加载路径?

时间:2016-12-29 16:45:15

标签: symfony autoload

我使用子树中的捆绑包,因此我无法修改结构或其位置。我目前正试图将它包含在自动加载过程中,并且未能找到"未找到的类"错误信息。 目前,我的项目树(由Symfony 3.2制作)是:

|- app
|- src
    |- MyappBundle
    |- external
         |- Author
             |-UserBundle
                |- Controller
                |- [...]
                |- AuthorUserBundle.php

AuthorUserBundle.php包含:

namespace Author\UserBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class AuthorUserBundle extends Bundle
{
}

要包含此捆绑包,我在app / AppKernel.php中添加了

new Author\UserBundle\AuthorUserBundle(),

我还在AnnotationRegistry::registerLoader之前添加到了app / autoload.php:

$loader->add('Author',__DIR__.'/../src/external');

我不掌握命名空间的重叠,特别是关于通话的深度,但我尝试了autoload.php中的许多变体(如' /../ src / external / Author')或AppKernel.php(作者\ UserBundle \ AuthorUserBundle \ AuthorUserBundle())以相同的错误消息结束所有"未找到类"。

我错过了什么?

抱歉新手问题,我先试着一个人,谢谢你的时间。

P.S。 :external目录无法删除,git子树进程不允许在非空目录中运行。

2 个答案:

答案 0 :(得分:2)

您不应该使用git子树来包含第三方代码。向composer.json添加AuthorUserBundle,其中包含所有需要的自动加载和依赖项。一个最小的示例(如果您仍然使用Symfony 2.7 / 2.8,则将^3.0替换为^2.7):

{
    "name": "author/user-bundle",
    "license": "proprietary",
    "type": "library",
    "require": {
        "symfony/framework-bundle": "^3.0"
    },
    "autoload": {
        "psr-4": {
            "Author\\UserBundle\\": ""
        },
    }
}

并在主项目中将其作为private repository。请添加git标签并关注semantic versioning

假设您的捆绑包被称为author/user-bundle(作曲家名称),请将以下内容添加到您的项目中composer.json

{
    "require": {
        "author/user-bundle": "^1.0"
    },
    "repositories": [
        {
            "type": "vcs",
            "url":  "git@git.example.author/user-bundle.git"
        }
    ]
}

编辑1:为AuthorUserBundle存储库添加了composer.json。

答案 1 :(得分:0)

我会尝试使用addPsr4方法

$loader->addPsr4('Author\\UserBundle\\', __DIR__.'/../src/external/Author/UserBundle');