安装FOSUser Bundle 2.0后更新Doctrine Schema遇db_driver配置错误求助
解决FOSUserBundle 2.0更新Doctrine Schema时"db_driver未配置"的问题
我之前也碰到过一模一样的坑,折腾了好一会儿才捋清楚几个可行的解决方向,你可以逐个排查试试:
1. 先死磕配置文件的缩进与层级
YAML对缩进的敏感度真的能坑死人,先确认config/config.yaml里的FOSUser配置层级完全正确,格式必须是这样:
fos_user: db_driver: orm # 如果你用的是mongodb/couchdb就改成对应值 firewall_name: main user_class: App\Entity\User # 其他可选配置...
重点检查:db_driver必须直接挂在fos_user节点下,不能缩进错放到其他子节点里,而且统一用2个空格缩进(别混着用tab)。
另外别忘了确认config/bundles.php里已经启用了FOSUserBundle:
return [ // ...其他Bundle FOS\UserBundle\FOSUserBundle::class => ['all' => true], ];
2. 清空缓存是永远的第一急救手段
不管你是开发还是生产环境,先把缓存清干净再说——有时候旧缓存里的错误配置会一直残留:
# 开发环境 php bin/console cache:clear # 生产环境记得加参数 php bin/console cache:clear --env=prod
清完缓存后再重新执行Schema更新命令:
php bin/console doctrine:schema:update --force
3. 检查环境特定配置文件是否覆盖了主配置
如果你在config/packages/dev/或config/packages/prod/目录下有单独的fos_user.yaml文件,要确认这些环境配置里也包含了db_driver的设置,不然会覆盖掉主配置里的内容,导致系统检测不到这个必填项。
4. 验证User实体的继承与映射是否正确
你的User实体必须正确继承FOSUserBundle的基类,并且ORM映射配置完整,比如:
namespace App\Entity; use FOS\UserBundle\Model\User as BaseUser; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="fos_user") */ class User extends BaseUser { /** * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") * @ORM\Column(type="integer") */ protected $id; // 你的自定义字段... }
如果实体映射有问题,也会间接触发配置检测的错误提示。
5. 极端情况:重装Bundle
如果上面所有步骤都试过还是不行,可以尝试卸载后重新安装Bundle,排除安装过程中可能出现的文件损坏或配置遗漏:
composer remove friendsofsymfony/user-bundle composer require friendsofsymfony/user-bundle "2.0.*"
安装时注意观察命令行输出,确保没有报错信息。
内容的提问来源于stack exchange,提问作者Václav Stummer
相关产品推荐
相关产品推荐

