Вед-дев, Сео, Манимейкинг

Валидация как сервис в Laravel 4

Валидацию в Laravel можно использовать в контроллере или модели, но это является дурным тоном. Сегодня мы рассмотрим пример валидации как сервиса.

Начнем с создания директории "app/lib". После того, как мы создадим эту папку, нам нужно ее прописать в composer.json:

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/models",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php",
        "app/lib"
    ]
},

Затем после этого нужно запустить:

composer dump-autoload

Далее, создаем еще одну папку "app/lib/Validation" и в ней размещаем все наши валидаторы.

Validator.php - файл с основной логикой валидации.

namespace Validation;

abstract class Validator {
        protected $input;
        public static $rules;
        protected $messages;
        private $errors;

        public function __construct($input) {
                $this->input = $input;
        }

        public function fails() {
                $validation = \Validator::make($this->input, static::$rules, $this->messages);

                if ($validation->fails()) {
                        $this->errors = $validation->errors();
                        return true;
                }

                return false;
        }

        // display errors
        public function errors() {
                return $this->errors;
        }
}

PageFormValidator.php - валидатор для модели Page.

namespace Validation;

class PageFormValidator extends Validator {
        public static $rules = array(
        'title' => 'required|min:3',
        'body' => 'required|min:10'
        );

        public $messages = array(
        'required' => 'The :attribute field is required',
        'title.min' => 'Not enough characters in :attribute, minimum is 3',
        'body.min' => 'Not enough characters in :attribute, minimum is 10'
        );
}

А теперь пример использования валидации в контроллере, в нашем случае - это PageController.php:

public function savePage() {
    // Validation
    $validator = new PageFormValidator(Input::all());

    if ($validator->fails()) {
        return Redirect::action('PageController@create')->withErrors($validator->errors());
    }

    $input = array(
        'title' => Input::get('title'),
        'body' => Input::get('body'),
        'slug' => Slug::make(Input::get('title')),
    );

    $this->page->saveCreate($input);

    return Redirect::action('PageController@home');
}


Комментарии (2)

То есть для каждой формы нужно создавать отдельный класс с валидацией? А если их много?

А если форм много и у них один и тот же принцип валидации, то можно испльзовать этот же класс для остальных форм.

Разделы

Подписаться

Подписка на RSS-лента последние записи из Блога

Комменты

  • Olzhas 9 месяцев 2 недели назад
    Спасибо. С Новым Годом! 
  • Den 10 месяцев 2 недели назад
    В первой функции, при создании переменной $li_previous нужно поменять '←' с NULL, в $li_next сделать тоже самое. 
  • Гость 10 месяцев 2 недели назад
    Если все ровно так как было описано, то нет никаких сомнений что домен увел сам регистратор. Потому что вероятность того 
  • Валерий 11 месяцев 2 недели назад
    да можно делать импорт-экспорт только лишь в оболочке на входя на mysql сервер 
  • admin 11 месяцев 2 недели назад
    Валерий, а зачем вам именно так делать экспорт? Если я не ошибаюсь, то там нет какой-либо команды чтобы сделать экспорт 
  • Валерий 11 месяцев 2 недели назад
    захожу на mysql через ssh по команде  
  • admin 11 месяцев 2 недели назад
    Добрый вечер, какой у вас клиент? 
  • Валерий 11 месяцев 2 недели назад
    Здравстуйте, есть команда чтобы сделать экспорт базы внутри mysql клиента? 
  • Eduard 12 месяцев 1 день назад
    Видать, домен хороший был. Заявление пробывали писать на мошенника? 
  • Stas 1 год 1 месяц назад
    Ошибка в ключе квантификатора - replace(/будешь|пить/ig, "хлеб"); Указать -g для прохода по всем совпадениям!