我在Symfony项目中使用了许多私有的自定义捆绑包 . 在Symfony 3下,他们住在src的子目录中:
src/
DSL/
DSLLibraryBundle/
DSLTelnetBundle/
...
SiteBundle/ # (or AppBundle)
在Symfony 4下,特定于应用程序的捆绑包已经消失,我不清楚我的自定义捆绑包应该在哪里 .
有关捆绑包的文档(https://symfony.com/doc/current/bundles/best_practices.html#bundles-naming-conventions)未提供有关放置自定义捆绑包的具体建议 .
我已经尝试将我的DSL目录直接放在项目目录下和src /下 . 无论如何,我最终都会遇到未定义的类错误 .
我目前有:
src/
DSL/
LibraryBundle/
DSLLibraryBundle.php
捆绑文件:
// src/DSL/DSLLibrary/DSLLibraryBundle.php:
namespace DSL\LibraryBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class DSLLibraryBundle extends Bundle
{
}
bundles.php中的条目:
DSL\LibraryBundle\DSLLibraryBundle::class => ['all' => true],
运行控制台命令时的当前错误:
PHP致命错误:未捕获的Symfony \ Component \ Debug \ Exception \ ClassNotFoundException:尝试从命名空间“DSL \ LibraryBundle”加载类“DSLLibraryBundle” .
几个笔记:
- 我的自定义捆绑包未通过Composer安装
- 一旦我开始工作,实际的DSL /目录将是一个符号链接
2 回答
Symfony4不再使用src /中的bundle . 捆绑包仅在供应商/作为依赖项中使用 .
Update 30-Jan-2017:
好的 . 据我所知,Symfony 4实际上是私人捆绑的敌意 .
额外的工作不断出现越来越多的问题(例如让单元测试工作为私有捆绑) .
我目前正在寻求其他不会导致额外日常工作的选择 .
请忽略我在下面的原始答案 .
My original answer:
经过一些挖掘后,我意识到我的自定义包目录树中的类在dump-autoload期间没有被作曲家选中 .
我认为这是因为Symfony 4除了在vendor /中之外不会期待任何捆绑 .
解决方案是将我的库目录添加到composer.json .
所以我的项目树现在包含我的私有自定义包的目录 .
我的composer.json autoload.psr-4条目现在看起来像这样: