Laravel 5:使用不同的消息验证来自2个表的字段

时间:2015-06-10 07:45:55

标签: laravel laravel-5 laravel-validation

我有一个表'user_temps',其中包含新用户,直到他们确认订阅为止。完成后,我将用户复制到“用户”表。

在注册表格中我有这个验证参数:

'email' => 'required|email|max:255|unique:user_temps|unique:users',

问题在于我需要有两条不同的消息: 如果用户在'user_temps'表中,而另一个用户在'users'表中。

谢谢

3 个答案:

答案 0 :(得分:1)

您可以设置自定义验证消息

$rules = array(
        'email' => 'required|email|max:255|unique:user_temps|unique:users'
    );
    $messages = array(
        'email.required' => 'Email is required',
        'email.email' => 'Email need to be email type',
        'email.unique:user_temps' => 'This email is already exists in user temps table',            
        'email.unique:users' => 'This email is already exists in users table',           
    );
    $validator = Validator::make(Input::all(), $rules, $messages);

答案 1 :(得分:1)

在尝试了一些不好的解决方案之后,某人(坦克你的小伙伴)在另一个地方给了我答案:

我为临时用户

定义了自己的验证器
public function validateTempUserEmail($attribute, $value, $parameters)
{
    return UserTemp::where($attribute, $value)->count() == 0;
}

现在验证电子邮件的规则是

'email' => 'required|email|max:255|TempUserEmail|unique:users',

答案 2 :(得分:0)

为简化起见,请不要执行以下操作:

在您用户的表格中,有一个名为'订阅的布尔列'默认为0.然后,当他们确认订阅时,您可以将其设置为1?

然后,在authentication后,您可以执行此检查:

if (Auth::attempt(['email' => $email, 'password' => $password, 'subscription' => 1]))
{
    // The user is active, subscribed and exists.
}