返回

Laravel 10 中 `Illuminate\Validation\Validator::validatePhone` 方法使用指南

php

Laravel 10 中使用 Illuminate\Validation\Validator::validatePhone 方法的解决方案

引言

在使用 Laravel 10 构建认证 API 时,开发人员可能会在注册和登录表单中使用 Illuminate\Validation\Validator::validatePhone 方法,从而遇到 "Method Illuminate\Validation\Validator::validatePhone does not exist" 错误。这是因为 Laravel 10 中已弃用了 validatePhone 方法,需要采取替代方法。

解决方案

要解决此问题,有必要按照以下步骤进行操作:

1. 安装验证规则扩展包

使用 Composer 安装 laravel/validation 扩展包:

composer require laravel/validation

2. 注册验证规则

app/Providers/AppServiceProvider.php 中,在 register() 方法中添加以下代码以注册验证规则:

use Illuminate\Support\Facades\Validator;

public function boot()
{
    Validator::extend('phone', 'Illuminate\Validation\Rules\Phone::validate', trans('validation.phone'));
}

3. 更新验证规则

在注册和登录控制器的 validate() 方法中,将 phone 验证规则更新为:

'phone' => 'required|phone'

具体实现

注册控制器

public function register(Request $request)
{
    $request->validate([
        "name" => "required",
        "email" => "email|unique:users",
        "phone" => "required|phone",
        "password" => "required|confirmed"
    ]);

    // Author model
    User::create([
        "name" => $request->name,
        "email" => $request->email,
        "phone" => $request->phone,
        "password" => Hash::make($request->password)
    ]);

    // Response
    return response()->json([
        "status" => true,
        "message" => "User created successfully"
    ]);
}

登录控制器

public function login(Request $request)
{
    $request->validate([
        "phone" => "required|phone",
        "password" => "required"
    ]);

    if (Auth::attempt(["phone" => $request->phone, "password" => $request->password])) {
        $user = Auth::user();

        $token = $user->createToken("myToken")->accessToken;

        return response()->json([
            "status" => true,
            "message" => "Login successful",
            "access_token" => $token
        ]);
    }

    return response()->json([
        "status" => false,
        "message" => "Invalid credentials"
    ]);
}

注意事项

  • 确保 Laravel 版本为 10 或更高。
  • 对于不同的国家或地区,可以使用 country 选项指定电话号码验证规则,例如 phone:US
  • 有关 phone 验证规则的更多详细信息,请参阅 Laravel 文档:https://laravel.com/docs/10.x/validation#rule-phone

常见问题解答

1. 为什么 Laravel 10 中弃用了 validatePhone 方法?

validatePhone 方法已弃用,以遵循 PSR-2 验证规则约定。

2. 注册验证规则的目的是什么?

注册验证规则允许 Laravel 使用自定义消息验证电话号码。

3. 为什么需要更新 phone 验证规则?

更新验证规则对于使用新的 Illuminate\Validation\Rules\Phone 类进行电话号码验证是必需的。

4. 如何指定特定国家的电话号码验证规则?

可以使用 country 选项指定特定国家的电话号码验证规则,例如 phone:US

5. 如何获取有关 phone 验证规则的更多信息?

有关 phone 验证规则的更多信息,请参阅 Laravel 文档:https://laravel.com/docs/10.x/validation#rule-phone