LaravelTrust搭配LaravelAuthUI注册时无法导入角色到数据库
问题原因
- 执行顺序错误:
return语句会直接终止当前函数的执行流程,写在return User::create(...)之后的角色绑定代码永远不会被触发。 - 变量未定义:代码中没有将
User::create()返回的新用户实例赋值给$User变量,即使调整return的位置,这行角色绑定代码也会因为找不到对应变量抛出运行错误。 - 前置依赖缺失:需要提前确认数据库
roles表中存在名称/标识为user的角色记录,否则关联逻辑无法匹配到对应角色,自然不会写入关联数据。
修复步骤
- 提前创建基础角色
首次部署时先在角色表中写入user角色,可通过数据填充或tinker执行创建逻辑,示例(tinker环境下执行):
\Laratrust\Models\Role::create(['name' => 'user', 'display_name' => '普通用户']);
- 修正注册方法逻辑
将用户实例赋值给变量,先执行角色绑定,最后再返回用户实例,修正后的代码如下:
protected function create(array $data) { $user = User::create([ 'name' => $data['name'], 'email' => $data['email'], 'phonenumber' => $data['phonenumber'], 'password' => Hash::make($data['password']), ]); $user->attachRole('user'); return $user; }
额外注意
- 变量命名建议遵循PHP小驼峰规范,不要随意将变量首字母大写,避免出现变量名大小写不匹配的低级错误。
- 如果当前版本LaraTrust的
attachRole方法不支持直接传入角色名,可以先查询对应角色实例再传入,示例:$userRole = \Laratrust\Models\Role::where('name', 'user')->firstOrFail(); $user->attachRole($userRole);
内容的提问来源于stack exchange,提问作者RATANAK SB
相关产品推荐
相关产品推荐

