PostgreSQL
coub
express.js
freeware
git
jquery
laravel
links
linux
macos
mysql
node.js
php
powershell
python
ubuntu
vim
virtualbox
анекдот
блог
игры
интересно
стихи
цитаты
You have to
login
to post a new comment.
Laravel4: Валидация и кастомные название полей в сообщениях об ошибках
September 21, 2014
Есть ли у вас такая проблема что.. Нет, правильнее будет сразу скриншот показать.
Маркером отмечены сообщения о том, что валидатору не нравятся данные которые вы пытаетесь сохранить через модель. Все хорошо и здорово кроме названия поля в сообщениях. Смышленый пользователь конечно способен догадаться что за поле имеется ввиду, но очевидно чем больше полей в исходной форме, тем сложнее придется пользователю. Да и как-то.. в общем перфекционисты от этого страдают. Есть "способ вылечить" это (на самом деле документированная возможность). Выглядит это примерно так.
Теперь сообщения будут выглядеть вот так
Стало куда веселее. Осталось почитать оф. документацию по валидации.
Метод setAttributeNames можно поискать в API, он там есть, но описание скромненькое конечно.
Что касается метода isValid, то это метод модели который используется для валидации вот так
Пример использования такой модели в контроллере выглядит примерно так
P.S.: Для поддержки языковых версий можно вписывать названия свойств вот так
Маркером отмечены сообщения о том, что валидатору не нравятся данные которые вы пытаетесь сохранить через модель. Все хорошо и здорово кроме названия поля в сообщениях. Смышленый пользователь конечно способен догадаться что за поле имеется ввиду, но очевидно чем больше полей в исходной форме, тем сложнее придется пользователю. Да и как-то.. в общем перфекционисты от этого страдают. Есть "способ вылечить" это (на самом деле документированная возможность). Выглядит это примерно так.
public function isValid() { $validator = Validator::make( $this->toArray(), [ 'name' => 'required', 'full_link' => 'required|url|unique:table_links,full_link,' . $this->id, ] ); $validator->setAttributeNames([ 'name' => 'Название ссылки', 'full_link' => 'Ссылка для подсчета кликов', ]); if ($validator->fails()) { $this->errors = $validator->errors(); } return $validator->passes(); }
Теперь сообщения будут выглядеть вот так
Стало куда веселее. Осталось почитать оф. документацию по валидации.
Метод setAttributeNames можно поискать в API, он там есть, но описание скромненькое конечно.
Что касается метода isValid, то это метод модели который используется для валидации вот так
public static function boot() { parent::boot(); // before update and create MyModel::creating(function($item) { if (!$item->isValid()) return false; }); MyModel::saving(function ($item) { if (!$item->isValid()) return false; }); }То есть на модель вешаются хуки, как видно на события сохранения и создания объекта, которые собственно и вызывают наш метод валидации при соответствующих обстоятельствах.
Пример использования такой модели в контроллере выглядит примерно так
public function itemSave() { $item = MyModel::find(Input::get('id')); if (!$item) { App::abort(404); } $item->name = Input::get('name'); $item->full_link = Input::get('full_link'); if (!$item->save()) { return Redirect::route('item-edit', [$item->id])->withErrors($item->errors); } return Redirect::route('item-edit', [$item->id])->withItemSaved(1); }Пример я упростил, но суть та же. Если сохранение отработало с ошибкой, возвращаемся назад с ошибками из валидатора, иначе всё тип-топ, сообщаем об успешном сохранении. Это всё.
P.S.: Для поддержки языковых версий можно вписывать названия свойств вот так
$validator->setAttributeNames([ 'name' => Lang::get('error.name'), 'full_link' => Lang::get('error.full_link'), ]);
Comments
No comments here yet.