在Symfony 3 composer.json中使用“ MyBundle \\”:“ src / MyBundle”优于“”:“ src /”吗?

时间:2018-12-10 09:56:35

标签: php symfony composer-php autoloader

要将现有的Symfony 2.8项目迁移到Symfony 3.4,我首先设置了一个新的Symfony 3.4项目。

将我的捆绑软件添加到新项目中之后,Symfony在AppKernel.php中抛出ClassNotFoundException

  

ClassNotFoundException

     

试图从名称空间加载类“ MyBundle”   “名称空间\ MyBundle”。您是否忘记了另一个的“使用”声明   命名空间?在AppKernel.php中(第17行)

我找到了这个问题的几个问题和答案,解决方案非常简单:

// Symfony 2.8 composer.json
...
"autoload" : {
    "psr-0" : {
        "" : "src/"
    }
},


// Symfony 3.4 composer.json
...
"autoload": {
    "psr-4": {
        "AppBundle\\": "src/AppBundle"
    },
    "classmap": [
        "app/AppKernel.php",
        "app/AppCache.php"
    ]
},

由于Symfony 3.4不再定义"" : "src/",而是在"AppBundle\\": "src/AppBundle"中包含了具体的捆绑软件,因此解决方案是在此处添加我的捆绑软件:

"autoload": {
    "psr-4": {
        "AppBundle\\": "src/AppBundle",
        "MyBundle\\": "src/MyBundle"
    },
    "classmap": [
        "app/AppKernel.php",
        "app/AppCache.php"
    ]
},

但是,虽然这可以解决问题,但我想知道与使用"" : "src/"相比,包含具体捆绑商品有什么好处。

这种方法的缺点很明显:添加新捆绑包时,还有一个地方需要指定它。

优势是什么?最好添加每个捆绑软件,还是我可以继续使用"" : "src/"

0 个答案:

没有答案