You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 23:32:35