Добавление валидации в artisan команду Laravel

Ромчик
0

laravelДоброго времени суток. В одной своей статье «Создание artisan команды в Laravel» я рассмотрел как создать консольную команду в Laravel. Все хорошо. Но! Возникают ситуации, когда необходимо в консольной команде использовать валидацию Laravel. Например, при записи данных в базу проверять значение поля на уникальность или значение является email адресом. Дальше давайте это реализуем.

Как устанавливать и настраивать Laravel я не буду (в интернете материалов много). Если вы еще не знаете как установить и произвести первоначальную настройку Laravel, то обратитесь к документации.

Шаг 1. Создание таблицы и модели.

На этом шаге мы создадим миграцию для создания таблицы emails, в которой мы будем хранить email адреса. В этой таблице будет три поля: email, created_at, updated_at. Дальше создадим модель Email для работы с нашей таблицей users.

Для создания миграции create_emails_table выполним следующую команду:


php artisan make:migration create_emails_table --create=emails

Отлично миграция создана.

Создание миграции

При создании миграции мы использовали параметр create, который сразу в миграцию подставит код  для создания таблицы с названием указанным в значении этого параметра.

Теперь отредактируем нашу миграцию (изменим метод up):

Было:


public function up()

{

Schema::create('emails', function (Blueprint $table) {

$table->increments('id');

$table->timestamps();

});

}

Стало:


public function up()

{

Schema::create('emails', function (Blueprint $table) {

$table->increments('id');

$table->text('email');

$table->timestamps();

});

}

Отлично. Теперь мы можем запустить миграцию, для этого выполним следующую команду:


php artisan migrate

Отлично миграция выполнена. И если мы перейдем в нашу базу данных, то увидим таблицу emails с полями: id, email, created_at, updated_at

Запуск миграции

Теперь давайте создадим модель Email для этого выполните команду:


php artisan make:model Email

Модель создана.

Создание модели

Поправим немного только, что созданную модель (добавим свойство $fillable, в котором указываются разрешенные для массового добавления поля ).

Все модели по умолчанию находятся в каталоге app


protected $fillable = ['email'];

Отлично. Мы создали таблицу и модель. Теперь можем перейти ко второму шагу.

Шаг 2. Создания консольной команды Laravel

Для создания artisan команды необходимо выполнить команду:


php artisan make:command CreateEmail

Отлично. Команда создана.

Создание artisan команды

Более подробно, как создать и как зарегистрировать команду вы можете прочитать в статье «Создание artisan команды в Laravel»

Команду я назвал: email:create

Описание команды: write email to the database

Теперь для вывода списка всех artisan команд введем команду:


php artisan

Список artisan команд

Отлично команда создана. Переходим к следующему шагу.

Шаг 3. Описание команды и добавление валидации к artisan команде.

Основной функционал консольной команды Laravel описывается в методе handle.

Давайте сначала опишем функционал команды без валидации. При вызове команды мы должны ввести email. Дальше этот email должен быть записан в базу. Если email записан в базу, то должно быть сообщение «User created».


public function handle()

{

//запрашиваем email адрес

$email = $this->ask('Email');

//записываем email в базу

\App\Email::create([

'email' => $email,

]);

//выводим сообщение User created

$this->info('User created!');

}

Проверяем.  Выполняем команду:


php artisan email:create

Выполнение собственной artisan комманды

Отлично. Если проверим базу данных, то в таблице emails у нас появилась запись.

Теперь давайте добавим валидацию.

Первое нужно указать, что мы используем Validator


use Validator;

Проверять email мы будет, что поле обязательное, уникальное и это email адрес.

Поправим наш метод handle:


public function handle()

{

//запрашиваем email адрес

$email = $this->ask('Email');

//валидация

$validator = Validator::make(['email'=>$email],['email' => 'required|email|unique:emails']);

if ($validator->fails()) {

//выводим ошибку

$this->error('User not created');

//выводим ошибки валидации

foreach ($validator->errors()->all() as $error){

$this->comment($error);

}

die;

}

//записываем email в базу

\App\Email::create([

'email' => $email,

]);

//выводим сообщение User created

$this->info('User created!');

}

Проверяем. Сначала давайте введем email, который уже есть. Дальше введем email, который не является email адресом. А затем введем email, который является email адресом и которого нет в базе данных.

Тестирование валидации в консоли

Как видим валидация работает.

Заключение.

Мы с вами создали artisan команду, которая записывает в базу данные, но перед этим валидирует их. И если валидация не проходит, то в консоль выводятся сообщения валидации.

Официальная документация по валидации

Официальная документация по вводу/выводу данных в консоли

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

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

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