我想在Symfony开始一个新的3.3项目并像往常一样开始:
1。)创建新项目:symfony new ArtProject
2。)创建一个新的Bundle:php app/console generate:bundle
(Paul / ArtBundle,yml,src /)
然后我运行本地服务器,当我打开127.0.0.1:8000时,我收到了这条美丽的信息:
(1/1)ClassNotFoundException
尝试从命名空间加载类“PaulArtBundle” “保罗\ ArtBundle”。你忘记了另一个人的“使用”陈述吗? 命名空间?在AppKernel.php(第19行)
这很奇怪,我还没弄清楚到目前为止这种情况发生的原因。在创建Bundle之前,没有错误;我看到了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
{
}
有什么想法吗?我没有更改任何东西,我只运行了这些命令。
答案 0 :(得分:65)
我刚刚安装了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的autload部分。编辑composer.json和:
# composer.json
"autoload": {
"psr-4": {
"AppBundle\\": "src/AppBundle",
"Paul\\": "src/Paul"
},
"classmap": [ "app/AppKernel.php", "app/AppCache.php" ]
},
然后运行
composer dumpautoload
然后重启服务器(可能)。这应该修复bundle类未找到的问题。
我没有使用generate:bundle命令已经有一段时间了,因为标准是将所有内容放在AppBundle之下所以我不知道这已经被打破了多长时间&#34;打破了#34;。但在过去一周左右至少有三个问题表明这是近期的事情。
顺便说一句,当我刷新浏览器时,我得到了#34; Hello World&#34;这让我有些失望。原来这个新的包覆盖了/ route,这也很特别。
如果有人想知道为什么会这样,Symfony 3.2从
改变了#composer.json
"psr-4": { "": "src/" },
To
"psr-4": { "AppBundle\\": "src/AppBundle" },
你可以随时改变它,虽然我认为拼出单个命名空间可能会更好&#34;。不确定。
这是一个有更多细节的问题:https://github.com/symfony/symfony-standard/issues/1098
看起来维护人员比打破现有命令更有利于提高速度。那好吧。 Symfony Flex应该让一切变得更好。
答案 1 :(得分:3)
如果您为多个项目中的用法生成(具有自己的命名空间),则需要将其添加到mvn clean
中,如下所示:
假设您的包名称为composer.json
,其名称空间为CompanyFooBundle
,那么composer autoload部分应如下所示:
Company\Bundle\FooBundle
答案 2 :(得分:0)
这对我有用:
使用
生成您的Bundle./ console generate:bundle
按照以往的步骤,现在,使用行
在composer.json文件中执行您想要的操作"AppBundle\\": "src/AppBundle"
替换为"": "src/"
或添加您的捆绑包,例如:"BackendBundle\\": "src/BackendBundle"
以下是新篇幅:
在bin目录中安装composer,复制并粘贴https://getcomposer.org/download/
在项目目录中的某个级别上,在(根据项目的)根文件夹中运行下一个命令
php ./bin/composer.phar update
答案 3 :(得分:0)
删除vendor
目录并再次运行composer install
帮助我解决了同样的问题。