Создание собственного валидатора в Laravel

Ромчик
0

laravelДоброго времени суток. В статье «Регистрация по инвайтам в Laravel» мы создали регистрацию пользователей в Laravel по инвайтам. Делали проверку введенного кода с кодом хранящимся в базе. В этой статье мы вынесем данную проверку в валидатор. Для чего создадим свое собственное правило валидации в Laravel.

Приступим. И первое, что мы сделаем это создадим свое правило валидации.

Создание собственного правила валидации.

Вообще в Laravel есть несколько способов создания своих правил валидаций. О которых вы можете прочитать в официальной документации.

Создадим файл в папке app/Providers InviteValidator.php и поместим в него следующий код:

<?php 
    namespace App\Providers;
    use App\Invite;
    use Illuminate\Validation\Validator;

    class InviteValidator extends Validator {
        public function validateInvite ($attribute, $value, $parameters)
        {
            $invite = Invite::where('invite',$value)->get();
    		if($invite->count() == 0){
    		    return false;
    		}
        return true;
    }
}

Где метод validateInvite описывает наше правило. Если метод вернет true, то валидация прошла успешно, если false, то валидация не пройдет. Метод validateInvite получает три параметра:

  • $attribute – имя проверяемого поля
  • $value – значение этого поля
  • $parameters – параметры, которые мы можем добавить к правилу

Регистрация созданного правила в Laravel

Переходим в файл AppServiceProvider.php, который находится в папке app/Providers и в метод boot добавляем:

    Validator::resolver(function($translator, $data, $rules, $messages){
        return new InviteValidator($translator, $data, $rules, $messages);
    });

и не забываем добавить:

    use App\Providers\Invite;
    use Validator;

Применение собственного правила валидации

Откроем файл AuthController.ph. У нас есть метод postRegister (как вы помните мы его изменяли в прошлой статье о регистрации по инвайтам в Laravel), вот его код:

public function postRegister(Request $request)
{
    $invite = Invite::where('invite',$request->invite)->get();      
    if($invite->count() == 0){
        return 'Ooops';
    }
    $validator = $this->validator($request->all());
    if ($validator->fails()) {          
        $this->throwValidationException($request, $validator);
    }
    $user = $this->create($request->all());
    //создаем код и записываем код
    $code = CodeController::generateCode(8);
    Code::create([
        'user_id' => $user->id,
        'code' => $code,
        'type' => 1,
    ]);
    //Генерируем ссылку и отправляем письмо на указанный адрес
    $url = url('/').'/auth/activate?id='.$user->id.'&code='.$code;      
    Mail::send('emails.registration', array('url' => $url),function($message) use ($request)
    {
        $message->to($request->email)->subject('Registration');
    });
    return 'Регистрация прошла успешно, на Ваш email отправлено письмо со ссылкой для активации аккаунта';
}

Отредактируем его следующим образом:

public function postRegister(Request $request)
{
    $validator = $this->validator($request->all());
    if ($validator->fails()) {         
        $this-&gt;throwValidationException($request, $validator);
    }
    $user = $this->create($request->all());
    //создаем код и записываем код
    $code = CodeController::generateCode(8);
    Code::create([
        'user_id' => $user->id,
        'code' => $code,
        'type' => 1,
    ]);
    //Генерируем ссылку и отправляем письмо на указанный адрес
    $url = url('/').'/auth/activate?id='.$user->id.'&code='.$code;      
    Mail::send('emails.registration', array('url' => $url), function($message) use ($request)
    {          
        $message->to($request->email)->subject('Registration');
    });
    return 'Регистрация прошла успешно, на Ваш email отправлено письмо со ссылкой для активации аккаунта';
}

Теперь перейдем к методу validator и добавим к полю invite наше правило валидации:

protected function validator(array $data)
{
    return Validator::make($data, [
        'email' => 'required|email|max:255|unique:users',
        'password' => 'required|confirmed|min:6',
        'invite' => 'required|Invite',
    ]);
}

Сообщение валидации

В папке resources/lang/ru создадим файл validation.php (обратите внимание на то, что в папке

resources/lang/en он уже есть – это английская версия сообщений) и добавим в него следующий код:

<?php
return [
    'invite' => 'Неверный код :attribute',
];

где в :attribute будет подставлено имя поля.

Проверяем, что получилось. Для начало введем неверный код:

01

Теперь введем верный код:

02Как видите все работает.

Вывод

Мы с вами создали новое правило валидации в Laravel. И применили его при регистрации новых пользователей.

Понравилась статья? Поделись с друзьями.
  • Add to favorites
  • Добавить ВКонтакте заметку об этой странице
  • Twitter
  • Facebook
  • Мой Мир
  • LiveJournal
  • Одноклассники
  • Блог Я.ру
  • MySpace
  • FriendFeed
  • В закладки Google
  • Google Buzz
  • Яндекс.Закладки
  • Reddit
  • StumbleUpon
  • Technorati
  • del.icio.us
  • БобрДобр
  • LinkedIn
  • Memori.ru
  • Сто закладок
  • Blogger

©2012-2020 По всем вопросам обращайтесь через форму обратной связиПолитика конфиденциальности

Яндекс.Метрика