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

Laravel Jetstream后端验证错误后,如何返回注册页并显示错误状态?

解决Laravel Jetstream注册时手机号重复错误返回注册页的问题

步骤1:在验证规则中添加手机号的校验逻辑

你当前代码未对phonenum字段做前置验证,数据库唯一约束触发时会抛出SQL异常,导致跳转到默认错误页。需要在验证环节提前校验手机号唯一性,这样验证失败时会自动返回注册页并携带错误信息。

修改CreateNewUser类中的验证代码:

namespace App\Actions\Fortify;

use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Laravel\Fortify\Contracts\CreatesNewUsers;
use Laravel\Jetstream\Jetstream;

class CreateNewUser implements CreatesNewUsers
{
    use PasswordValidationRules;

    /**
     * Validate and create a newly registered user.
     *
     * @param  array  $input
     * @return \App\Models\User
     */
    public function create(array $input)
    {
        Validator::make($input, [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            // 新增手机号验证规则
            'phonenum' => ['required', 'string', 'max:11', 'unique:users'],
            'password' => $this->passwordRules(),
            'terms' => Jetstream::hasTermsAndPrivacyPolicyFeature() ? ['accepted', 'required'] : '',
        ])->validate();

        return User::create([
            'name' => $input['name'],
            'email' => $input['email'],
            'password' => Hash::make($input['password']),
            'phonenum' => $input['phonenum']
        ]);
    }
}

规则说明:

  • required:确保手机号字段不为空(若允许空可根据需求删除)
  • string:限制字段为字符串类型
  • max:11:适配国内手机号长度,可根据地区调整
  • unique:users:校验手机号在用户表中唯一

步骤2:确保数据库层的唯一性约束(可选但推荐)

虽然前置验证已做校验,但为避免并发场景下的重复数据,建议保留数据库层面的唯一索引。若已添加可忽略,否则通过迁移实现:

  1. 创建迁移文件:
php artisan make:migration add_unique_constraint_to_phonenum_on_users_table
  1. 修改迁移文件:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->unique('phonenum');
        });
    }

    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropUnique('phonenum');
        });
    }
};
  1. 执行迁移:
php artisan migrate

步骤3:确保前端注册表单显示错误信息

在Jetstream的注册视图文件(通常为resources/views/auth/register.blade.php)中,给phonenum输入框添加错误提示区域:

<div>
    <x-label for="phonenum" value="{{ __('手机号') }}" />
    <x-input id="phonenum" class="block mt-1 w-full" type="text" name="phonenum" :value="old('phonenum')" required autofocus />
    <!-- 显示手机号的验证错误 -->
    @error('phonenum')
        <p class="mt-2 text-sm text-red-600">{{ $message }}</p>
    @enderror
</div>

这样验证失败时,错误信息会自动显示在手机号输入框下方,页面停留在注册页,不会跳转到默认错误页。

内容的提问来源于stack exchange,提问作者wafi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:00:55