У меня есть валидатор настройка так:Возможно ли изменить сообщение об ошибке в обратном вызове Laravel's Validator?
Validator::extend('valid_username', '[email protected]_username');
Тогда у меня есть следующий метод, который обрабатывает проверку. Он проверяет, существует ли имя пользователя и если имя пользователя содержит допустимые символы.
public function valid_username($attribute, $value, $parameters)
{
$u = User::where('username', $value)->get();
if ($u->count())
{
// here I would like to return "Username already taken."
return FALSE;
}
else if (preg_match("/^[[email protected]\.\-_]+$/", $value))
{
return TRUE;
}
else
{
// here I would like to return "Username contains invalid characters."
return FALSE;
}
}
Я хотел бы изменить сообщение об ошибке, возвращаемом этим валидатор в зависимости от вызвавшей ошибки валидации на провал. Однако я не знаю, как это сделать. В моих языковых файлах я настроил следующую строку для валидатора:
"valid_username" => "This username is already taken or contains invalid characters."
Возможно ли с помощью Laravel вернуть конкретное сообщение об ошибке? Или мне нужно разделить эту проверку на два пользовательских правила проверки? Это может быть не проблема в этом случае, но особенно если используется доступ к базе данных, я предпочел бы проверить полученную модель Eloquent в одном валидаторе вместо создания экземпляра объекта Eloquent дважды.
У меня такая же проблема. У меня есть специальный валидатор, который использует некоторую сложную логику разбора, чтобы определить, действителен ли вход. Сообщение об ошибке должно быть конкретно, что было неправильно, потому что «Анализ не удалось» бесполезен. Я хочу, чтобы валидатор мог вернуть строку вместо true/false. – takteek
Да, именно то, что мне тоже хотелось бы. Это можно было сделать в CodeIgniter. Но я еще не нашел способ сделать это в Laravel :( – santacruz