包括来自子树的 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。
我正在使用来自子树的包,所以我无法修改结构或它的位置。我目前正在尝试将其包含在自动加载过程中,但由于 "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。