Symfony 4.4安装Sonata User Bundle出现fos_user等配置错误如何解决
Symfony 4.4 安装Sonata User Bundle报错完整解决方案
核心问题原因
当前报「没有扩展可加载fos_user对应配置」的根因是FOSUserBundle未被正确注册到Symfony内核,且你安装的各Bundle版本与Symfony 4.4不兼容,配置格式也存在错误。以下是按顺序执行的修复步骤:
步骤1:安装匹配版本的依赖包
执行以下composer命令安装适配Symfony 4.4的Bundle版本,同时解决之前sonata.admin.manager.orm不存在的报错:
composer require friendsofsymfony/user-bundle:^2.1 sonata-project/user-bundle:^4.0 sonata-project/doctrine-orm-admin-bundle:^3.0
步骤2:确认Bundle注册
打开config/bundles.php文件,确认存在以下三行配置,缺失则手动添加:
<?php return [ // 其他原有Bundle FOS\UserBundle\FOSUserBundle::class => ['all' => true], Sonata\UserBundle\SonataUserBundle::class => ['all' => true], Sonata\DoctrineORMAdminBundle\SonataDoctrineORMAdminBundle::class => ['all' => true], ];
该操作完成后即可解决「找不到fos_user扩展」的报错。
步骤3:修正配置文件
3.1 修正fos_user.yaml配置
你当前的YAML格式错误且命名空间有误,将config/packages/fos_user.yaml替换为以下内容,同时解决之前templating服务不存在的报错:
fos_user: db_driver: orm firewall_name: main user_class: App\Entity\User from_email: address: "test@gmail.com" sender_name: "test" service: mailer: fos_user.mailer.noop # 无需发邮件可直接用该配置,需发邮件可替换为自定义实现
3.2 修正framework.yaml配置
删除config/packages/framework.yaml中最后一行的templating: engines: twig配置,Symfony 4.4已废弃该原生配置项,保留会引发额外报错。
步骤4:创建User实体
新建src/Entity/User.php文件,写入以下内容:
<?php 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 * @ORM\Column(type="integer") */ protected $id; public function __construct() { parent::__construct(); } }
步骤5:更新安全配置
修改config/packages/security.yaml为以下内容,适配FOSUserBundle的权限体系:
security: encoders: FOS\UserBundle\Model\UserInterface: bcrypt role_hierarchy: ROLE_ADMIN: ROLE_USER ROLE_SUPER_ADMIN: ROLE_ADMIN providers: fos_userbundle: id: fos_user.user_provider.username firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false main: pattern: ^/ form_login: provider: fos_userbundle csrf_token_generator: security.csrf.token_manager logout: true anonymous: true access_control: - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/admin/, role: ROLE_ADMIN }
步骤6:更新数据库结构
执行命令生成用户表:
php bin/console doctrine:schema:update --force
所有操作完成后清空缓存即可正常访问,此前所有报错均会被解决。
内容的提问来源于stack exchange,提问作者Zsen
相关产品推荐
相关产品推荐

