Laravel Fortify自定义CreateNewUser验证规则不生效问题求助
解决Laravel Fortify注册验证规则不生效的问题
看起来你遇到的是Fortify默认验证逻辑覆盖自定义规则的问题——虽然你修改了CreateNewUser里的验证代码,但Fortify本身还有一层请求验证在起作用。下面是几个具体的解决步骤:
1. 自定义注册请求类,替换Fortify默认规则
Fortify默认会使用自身的注册请求验证字段,你需要创建一个自定义的请求类来覆盖它:
- 首先创建
app/Http/Requests/RegisterRequest.php文件,写入你的验证规则:
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; use App\Models\User; class RegisterRequest extends FormRequest { /** * 授权判断 */ public function authorize() { return true; } /** * 自定义验证规则 */ public function rules() { return [ 'first_name' => ['required', 'string', 'max:255'], 'last_name' => ['required', 'string', 'max:255'], 'email' => [ 'required', 'string', 'email', 'max:255', Rule::unique(User::class), ], 'phone_number' => [ 'required', 'string', 'max:20', Rule::unique(User::class), ], 'password' => ['required', 'string', 'min:8', 'confirmed'], ]; } }
- 然后打开
config/fortify.php配置文件,找到features数组中的Features::registration()项,修改为指定你刚创建的请求类:
Features::registration([ 'registrationRequest' => \App\Http\Requests\RegisterRequest::class, // 如果你的注册视图路径没变,可以保留下面这行,否则修改为你的视图路径 'createUserView' => 'auth.register', ]),
2. 彻底清除所有缓存
之前你执行的缓存清理命令可能漏掉了路由缓存,执行以下命令一次性清理所有缓存文件:
php artisan optimize:clear
3. 检查前端请求 payload
确认你的前端发送的请求中,确实包含first_name、last_name等字段,而不是仍然在提交name字段。可以通过浏览器开发者工具查看请求的Form Data或JSON payload,确保字段名和你后端的规则完全匹配。
4. 确认CreateNewUser的逻辑正确
最后,检查CreateNewUser类的create方法,确保你是用$input['first_name']和$input['last_name']来创建用户,而不是误用了name字段:
public function create(array $input) { return User::create([ 'first_name' => $input['first_name'], 'last_name' => $input['last_name'], 'email' => $input['email'], 'phone_number' => $input['phone_number'], 'password' => Hash::make($input['password']), ]); }
完成这些步骤后,重新发起注册请求,应该就能使用你自定义的验证规则了。
内容的提问来源于stack exchange,提问作者Mandate
相关产品推荐
相关产品推荐

