【问题标题】:Symfony4 new bundle autoloadingSymfony4 新包自动加载
【发布时间】:2018-06-16 17:46:47
【问题描述】:

我想用 SF4 创建一个新的可重复使用的捆绑包。我遵循documentation 但如果我在“src”目录中添加我的新包,则会与 App 命名空间和作曲家自动加载发生冲突:

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

然后,我得到这个错误:

PHP 致命错误:未捕获 Symfony\Component\Debug\Exception\ClassNotFoundException:试图 从命名空间“Acme\TestBundle”加载类“AcmeTestBundle”。

我认为这是因为 PSR-4 自动加载器使用错误的命名空间 (App/Acme/TestBundle/AcmeTestBundle.php) 加载了文件。

有没有办法解决这个问题?我也尝试为我的应用程序创建另一个包,但由于 Kernel.php 文件而崩溃...

这个后备目录方法也不起作用:

"psr-4": {
    "": "src/"
}

【问题讨论】:

  • 我无法复制此问题。你试过运行composer dump-autoload吗?
  • 是的,我也这样做了。您是否按照文档说明进行操作?你使用的是 Symfony 4 版本吗?
  • 是的,我能够按照文档在我的 Symfony 4 应用程序中创建 AcmeTestBundle,使用与您使用的相同的 PSR-4 自动加载配置。其他要检查的事项:类的名称是否正确?所有文件和路径的名称是否正确?该类在文件顶部是否有正确的命名空间声明?
  • 将 Acme 添加到 config/services.yaml 中的排除目录列表中,以消除“名称已在使用”消息。
  • @Cerad 看起来它解决了问题!您能否添加您的答案,以便我验证它?非常感谢!

标签: php symfony composer-php autoload symfony4


【解决方案1】:

为了帮助 PSR-4 Autoloader 将 Acme 作为一个包加载,您必须排除他的 应用服务目录中的目录:

文件:config/services.yaml

services:
        ...
        App\:
        resource: '../src/*'
        # you can exclude directories or files
        # but if a service is unused, it's removed anyway
        **exclude: '../src/{Entity,Migrations,Repository,Acme}'**

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 2013-02-17
    • 2018-05-24
    • 2013-06-16
    • 2014-08-20
    • 1970-01-01
    • 2011-12-04
    相关资源
    最近更新 更多