我想在Symfony启动一个新的3.3项目,并像往常一样开始:
1.)创建新项目:symfony new ArtProject
2.)创建一个新的包:php app/console generate:bundle (Paul/ArtBundle,yml,src/)
然后我运行本地服务器,当我打开127.0.0.1:8000时,我得到了一条漂亮的消息:
(1/1) ClassNotFoundException 试图从命名空间"Paul\ArtBundle“加载类"PaulArtBundle”。您忘了另一个名称空间的"use“语句了吗?在AppKernel.php中(第19行)
这很奇怪,我还没弄清楚为什么会发生这种事。在创建捆绑之前,没有出现任何错误;我看到了symfony的典型开始页面。
public function registerBundles()
{
$bundles = [
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
......
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
new AppBundle\AppBundle(),
new Paul\ArtBundle\PaulArtBundle(),
];
}<?php
namespace Paul\ArtBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class PaulArtBundle extends Bundle
{
}知道那里发生了什么事吗?我没有改变任何事情,我只运行了这些命令。
发布于 2017-07-06 12:24:23
我刚刚安装了一份新的S3.3.4 (撰写本文时的最新版本),使用:
composer create-project symfony/framework-standard-edition s334 "3.3.4"
bin/console generate:bundle
Share across multiple apps: yes
namespace: Paul\ArtBundle
bundle name: PaulArtBundle
Target Directory: src/刷新浏览器,果然我得到了未找到的类消息。
当引入新的命名空间时,generate:bundle命令不会更新composer.json的自动加载部分。编辑composer.json并:
# composer.json
"autoload": {
"psr-4": {
"AppBundle\\": "src/AppBundle",
"Paul\\": "src/Paul"
},
"classmap": [ "app/AppKernel.php", "app/AppCache.php" ]
},那就跑
composer dumpautoload并重新启动服务器(可能)。这应该可以修复包类未发现的问题。
我还没有使用generate:bundle命令,因为标准是把所有东西都放在AppBundle下,所以我不知道这个命令“坏了”多久了。但至少有三个问题在过去一周左右表明这是最近的事情。
顺便说一句,当我刷新浏览器时,我得到了"Hello“,这让我感到有点恶心。结果发现,新的包覆盖/路由,这也是某种特殊的。
如果有人想知道为什么会发生这种情况,Symfony 3.2从
#composer.json
"psr-4": { "": "src/" },
To
"psr-4": { "AppBundle\\": "src/AppBundle" },您可以将其更改回原来的位置,尽管我认为拼写单个名称空间可能“更好”。不确定。
下面是一个更详细的问题:https://github.com/symfony/symfony-standard/issues/1098
看起来,比起破坏现有的命令,维护人员更倾向于微小的速度改进。哦,好吧。Symfony Flex应该能让一切再次变得美好起来。
发布于 2017-08-03 08:58:23
如果您生成了一个用于在多个项目中使用的包(带有自己的命名空间),则需要将其添加到composer.json中,如下所示:
让我们假设您的包名是带有命名空间CompanyFooBundle的Company\Bundle\FooBundle,那么composer autoload部分应该如下所示:
...
"autoload": {
"psr-4": {
"Company\\Bundle\\FooBundle\\": "src/Company/Bundle/FooBundle"
},
"classmap": [
"app/AppKernel.php",
"app/AppCache.php"
]
},
...发布于 2018-06-12 02:23:23
这对我来说是可行的:
生成你的捆绑
./控制台生成:bundle
并按照一贯的步骤执行,现在,在您的composer.json文件中使用行执行您想要的操作
"AppBundle\\": "src/AppBundle"用"": "src/"替换或添加包,例如:"BackendBundle\\": "src/BackendBundle"
,这是新的部件
php ./bin/composer.phar更新
https://stackoverflow.com/questions/44946911
复制相似问题