【发布时间】:2013-08-03 21:30:24
【问题描述】:
我有一个这样的自定义验证器设置:
Validator::extend('valid_username', 'ProfileController@valid_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("/^[A-Za-z0-9@\.\-_]+$/", $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 对象。
【问题讨论】:
-
我也有同样的问题。我有一个自定义验证器,它使用一些复杂的解析逻辑来确定输入是否有效。错误消息需要具体说明问题所在,因为“解析失败”是无用的。我希望验证器可以返回一个字符串,而不仅仅是真/假。
-
是的,正是我想要的。在 CodeIgniter 中可以做到这一点。但是我还没有在 Laravel 中找到一种方法:(
标签: laravel validation eloquent