自定義驗證規則

如果要建立自定義驗證規則,可以通過 Validator 外觀在服務提供者的 boot 方法中執行此操作。

<?php
namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Validator;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Validator::extend('starts_with', function($attribute, $value, $parameters, $validator) {
            return \Illuminate\Support\Str::startsWith($value, $parameters[0]);
        });

        Validator::replacer('starts_with', function($message, $attribute, $rule, $parameters) {
            return str_replace(':needle', $parameters[0], $message);
        });
    }
}

extend 方法接受一個字串,該字串將是規則的名稱和一個函式,該函式又將傳遞屬性的名稱,要驗證的值,規則引數的陣列和驗證器例項,並且應返回是否驗證通過。在這個例子中,我們檢查值字串是否以給定的子字串開頭。

此自定義規則的錯誤訊息可以像往常一樣在/resources/lang/[lang]/validation.php 檔案中設定,並且可以包含佔位符,例如,引數值:

'starts_with' => 'The :attribute must start with :needle.'

replacer 方法接受一個字串,該字串是規則的名稱和一個函式,該函式又將傳遞原始訊息(在替換之前),屬性的名稱,規則的名稱以及規則引數的陣列,並應在根據需要替換佔位符後返回訊息。

使用此規則與任何其他規則:

$this->validate($request, [
    'phone_number' => 'required|starts_with:+'
]);