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

Including a Symfony bundle from a subtree : how to expand autoload path?

我正在使用来自子树的包,所以我无法修改结构或它的位置。我目前正在尝试将其包含在自动加载过程中,但由于 "class not found" 错误消息而惨遭失败。 目前,我的项目树(使用 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(),

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

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

我不掌握名称空间的嵌套,尤其是关于调用的深度,但我尝试了 autoload.php 中的许多变体(如 '/../src/external/Author')或 AppKernel.php (Author\UserBundle\AuthorUserBundle\AuthorUserBundle()) 以相同的错误消息结束所有 "Class not found".

我错过了什么?

抱歉新手问题,我先自己试了,谢谢你的时间。

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

我会尝试 addPsr4 方法

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

您不应使用 git 子树来包含第 3 方代码。添加一个 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. Please add git tags to and follow 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。