Laravel Auth脚手架:注册表单角色值如何传入RegisterController的create方法?
Laravel Auth注册添加角色字段问题解答
一、$data['x']对应表单的哪个属性?
$data数组里的键对应表单元素的name属性,和id完全无关。浏览器提交表单时,只会把带有name属性的元素的value值发送给后端,id仅用于前端JS/CSS操作或关联
二、如何让下拉框的选中值传入create方法的$data数组?
你的create方法里已经写了'role' => $data['role'],但还需要完成两件关键操作,否则Laravel会过滤掉这个字段:
1. 在RegisterController中添加role字段的验证规则
找到RegisterController里的validator方法,把role字段加入验证规则,示例如下:
protected function validator(array $data) { return Validator::make($data, [ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'password' => ['required', 'string', 'min:8', 'confirmed'], // 新增role字段的验证规则 'role' => ['required', 'string', 'in:admin,manager,cashier'], ]); }
其中in:admin,manager,cashier用于限制提交的role值只能是你指定的三个选项,避免非法值存入数据库。
2. 给User模型添加role字段到$fillable数组
打开app/Models/User.php,找到$fillable属性,将role加入数组,允许批量赋值:
protected $fillable = [ 'name', 'email', 'password', 'role', // 新增此行 ];
Laravel默认开启批量赋值保护,只有在$fillable中声明的字段,才能通过create()方法写入数据库。
最后确认
完成上述两步后,下拉框的选中值就会正常出现在$data['role']中,create方法也能正确将role写入users表。另外别忘了确保你的users数据库表已经创建了role字段(可通过迁移文件添加,例如$table->string('role')->default('cashier');)。
内容的提问来源于stack exchange,提问作者RONALDO JR. ARNIBAL
相关产品推荐
相关产品推荐

