Есть ли у вас такая проблема что.. Нет, правильнее будет сразу скриншот показать.
...
Есть ли у вас такая проблема что.. Нет, правильнее будет сразу скриншот показать.
Маркером отмечены сообщения о том, что валидатору не нравятся данные которые вы пытаетесь сохранить через модель. Все хорошо и здорово кроме названия поля в сообщениях. Смышленый пользователь конечно способен догадаться что за поле имеется ввиду, но очевидно чем больше полей в исходной форме, тем сложнее придется пользователю. Да и как-то.. в общем перфекционисты от этого страдают. Есть "способ вылечить" это (на самом деле документированная возможность). Выглядит это примерно так.
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'),
]);