В этом посте мы рассмотрим как создать собственные правила валидации для Laravel Form Requests.
Если кто-то не знает что такое Form Requests, и как работает валидация в Laravel, настоятельно рекомендую изучить официальную документацию.
Для начала создомим заготовку своего правила с помощью команды:
php artisan make:rule Captcha
После выполнение этой команды, Laravel создаст дирректорию Rules в дирректории app и файл класса правила Captcha со следующим содержанием:
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class Captcha implements Rule
{
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
//
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'The validation error message.';
}
}
Далее нам нужно реализовать свою логику валидации, для этого реализуем метод passes()
public function passes($attribute, $value)
{
return \App\Helpers\Captcha::check($value);
}
Данный метод должен всегда возвращать либо true либо false.В данном примере, я валидируют каптчу.
Далее мы можем изменить метод message() , и вернуть свой текст ошибки, например:
public function message()
{
return 'The :attribute must valid. Go away!!!';
}
Теперь перейдём к тому, как же нам применить наше новое правило валидации в Form Request Class.
Импортируем класс нашего правила, в Form Request Class.
use App\Rules\Captcha;
Добавляем правило
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'user_name' => 'required',
'g_recaptcha_response' => ['required', new Captcha()],
'entity_id' => 'required',
'text' => 'required',
];
}
Если вы используете валидации непосредственно в контроллере, то тут тоже всё очень просто:
$request->validate([
'g_recaptcha_response' => ['required', new Captcha()],
'some_field' => 'required',
]);
Вот и всё, было не сложно! Теперь вы умеете создавать собственные правила валидации в Laravel.
{{ item.text }}