第一種:利用閉包方法(開發中最常用)
如果你在應用程序中只需要使用一次自定義規則的功能,則可以使用閉包而不是規則對象。閉包接收屬性的名稱,屬性的值如果驗證失敗則應該使用回調中的 $fail
:
$validator = Validator::make($request->all(), [
'title' => [
'required',
'max:255',
function ($attribute, $value, $fail) {
if ($value === 'foo') { //驗證規則
$fail($attribute.' is invalid.'); //驗證失敗提示信息
}
},
],
]);
第二種:使用規則對象
(1)使用 Artisan 命令 make:rule
來生成新的規則對象。接下來,讓我們用這個命令生成一個驗證字符串是大寫的規則。Laravel 會將新的規則存放在 app/Rules
目錄中:
php artisan make:rule Uppercase
(2)一旦創建了規則,我們就可以定義它的行爲。規則對象包含兩個方法: passes
和 message
。passes
方法接收屬性值和名稱,並根據屬性值是否符合規則而返回 true
或 false
。 message
方法應返回驗證失敗時應使用的驗證錯誤消息:
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class Uppercase implements Rule
{
/**
* 判斷驗證規則是否通過。
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
return strtoupper($value) === $value;
}
/**
* 獲取驗證錯誤消息。
*
* @return string
*/
public function message()
{
return 'The :attribute must be uppercase.';
}
}
一旦規則對象被定義好後,你可以通過將規則對象的實例和其他驗證規則一起來傳遞給驗證器:
use App\Rules\Uppercase;
$request->validate([
'name' => ['required', 'string', new Uppercase],
]);