首页 文章

私有,自定义捆绑包在哪里生活在Symfony 4中?

提问于
浏览
2

我在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 回答

  • 1

    Symfony4不再使用src /中的bundle . 捆绑包仅在供应商/作为依赖项中使用 .

  • 0

    Update 30-Jan-2017:

    好的 . 据我所知,Symfony 4实际上是私人捆绑的敌意 .

    额外的工作不断出现越来越多的问题(例如让单元测试工作为私有捆绑) .

    我目前正在寻求其他不会导致额外日常工作的选择 .

    请忽略我在下面的原始答案 .

    My original answer:

    经过一些挖掘后,我意识到我的自定义包目录树中的类在dump-autoload期间没有被作曲家选中 .

    我认为这是因为Symfony 4除了在vendor /中之外不会期待任何捆绑 .

    解决方案是将我的库目录添加到composer.json .

    所以我的项目树现在包含我的私有自定义包的目录 .

    <projectName>/
        assets/
        ...
        DSL/
            DSLLibraryBundle/
            DSLTelnetBundle/
            ...
        public/
        src/
        ...
    

    我的composer.json autoload.psr-4条目现在看起来像这样:

    "autoload": {
        "psr-4": {
            "App\\": "src/",
            "DSL\\": "DSL/"
        }
    },
    

相关问题