0

例如,用户将userName,传递email给我,我想进行自定义验证以检查数据库的user表是否有一个既userName相等又email相等且状态相等的列1 ?自定义验证如何实现?

例如:

用户输入:

用户名:彼得

电子邮件:peter@email.com

在案例 1 中,在数据库的用户表中:

Success: userName: Peter , email: peter@email.com, status: 1
Fail: userName: Peter , email: peter@email.com, status: 0
Fail: userName: Mary , email: peter@email.com, status: 1
Fail: userName: Peter , email: mary@email.com, status: 1
4

2 回答 2

4

您可以创建一个自定义验证方法作为包罗万象的方法。这里的主要问题是验证扩展只会将单个属性传递给方法,而不是所有三个属性的值。这将要求您破解验证。由于表、列名和输入的硬编码性质,此方法将非常适合您的特定应用程序。它也没有给您任何方式来告诉您问题所在的字段,并且需要一些额外的规则。另一个建议是将验证器类实际扩展为一个库,以便为您提供针对这种情况的更精细调整的验证引擎。

Validator::register('usercheck', function($attribute, $value, $parameters)
{
    $count = DB::table('user')
      ->where('userName', '=', Input::get('userName'))
      ->where('email', '=', Input::get('email'))
      ->where('status', '=', Input::get('status'))
      ->count();

    return $count > 0;
});

要使用它,只需将其添加为规则...请记住,这感觉有点 hacky,并且有更好的方法可以做到这一点,最值得注意的是我在开头段落中建议的方法。

$rules = array(
    'userName' => 'usercheck'
);
于 2013-05-07T12:32:25.867 回答
0

您可以使用此验证。

'userName' => 'unique:user,username',
'email' => 'unique:user,email'

请参阅有关此http://laravel.com/docs/validation#rule-unique (Laravel 3) 的文档或位于http://four.laravel.com/docs/validation#rule-unique的 Laravel 4 文档

于 2013-05-07T11:51:14.893 回答