Symfony4从现有数据库生成实体报错:AppBundle不存在或未启用
解决Symfony4中Doctrine映射导入时AppBundle不存在的问题
嘿,这个问题我之前也踩过坑!核心原因是Symfony4默认已经放弃了传统的Bundle结构,改用更轻量化的App命名空间直接管理代码,所以你执行命令时系统找不到AppBundle太正常了。给你两种解决方案,按需选择就行:
方案一:用Symfony4默认的无Bundle结构(强烈推荐)
直接把实体生成到默认的App\Entity目录下,把命令改成这样:
php bin/console doctrine:mapping:import --force App xml
执行完之后,Doctrine会自动在src/Entity下生成对应数据库表的实体类,完全不用折腾Bundle的事儿,这也是Symfony4+官方推荐的方式。
方案二:手动创建并启用AppBundle(仅当你有特殊需求时用)
如果你非得用Bundle结构,按下面的步骤一步步来:
- 先创建
src/AppBundle目录,然后在里面新建AppBundle.php文件,内容写死就行:
<?php namespace AppBundle; use Symfony\Component\HttpKernel\Bundle\Bundle; class AppBundle extends Bundle { }
- 然后去
config/bundles.php里注册这个Bundle(划重点!Symfony4以后已经不在Kernel.php的registerBundles里加Bundle了,都是用这个配置文件):
return [ // 保留原来已有的Bundle,比如FrameworkBundle、DoctrineBundle这些 AppBundle\AppBundle::class => ['all' => true], ];
- 现在再执行你最开始的命令:
php bin/console doctrine:mapping:import --force AppBundle xml
这次就能正常生成映射文件到src/AppBundle/Resources/config/doctrine目录下了。
顺便提一句:你之前在Kernel.php里加new AppBundle/AppBundle();报错,一是因为你还没创建这个类,二是Symfony4已经不推荐这么注册Bundle了,改用config/bundles.php才是正确姿势~
内容的提问来源于stack exchange,提问作者user8888463
相关产品推荐
相关产品推荐

