Свои правила валидации

access_time 2019-11-19 00:01:52

В этом посте мы рассмотрим как создать собственные правила валидации для 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.user_name }}
access_time 2018-11-01 20:15:22

{{ item.text }}