如何使Laravel的Validator $规则可选?

时间:2013-08-26 15:13:33

标签: php validation laravel laravel-4 eloquent

假设我有User模型,有两种方法:

user.php的

class User extends Eloquent
{  
    /* Validation rules */
    private static $rules = array(
        'user'  => 'unique:users|required|alpha_num',
        'email' => 'required|email'
    );

    /* Validate against registration form */
    public static function register($data)
    {
        $validator = Validator::make($data, static::$rules);
        if($validator->fails())
        {
            /*... do someting */
        }
        else
        {
            /* .. do something else */
        }
    }

    /* Validate against update form */
    public static function update($data)
    {
        $validator = Validator::make($data, static::$rules);
        if($validator->fails())
        {
            /*... do someting */
        }
        else
        {
            /* .. do something else */
        }
    }
}

我的问题:如何将验证规则设为可选,因此即使update()的数据仅为email字段,也会忽略user和仍然验证true 这甚至可能还是我错过了什么?

抱歉我的英语不好。

3 个答案:

答案 0 :(得分:8)

不确定我的问题是否正确,但如果用户是可选的,则应从验证器中删除“必需”。这样你就会:

'user'  => 'unique:users|alpha_num',

而不是:

'user'  => 'unique:users|required|alpha_num',

另一方面,我为我的模型创建了一个自定义方法,可以根据传入的参数返回自定义验证规则。

例如:

private function getValidationRules($rules)
{
    if ($rules == UPDATE_EMAIL)
    {
        return array('email' => 'required|email');
    } else {
        return array(
            'user'  => 'unique:users|required|alpha_num',
            'email' => 'required|email'
        );
    }
}

我想这只是个人选择,但我发现从方法中获取验证规则可以更好地控制我真正想要验证的内容,尤其是当你想要执行一些高级验证时。

希望它对你有所帮助。

答案 1 :(得分:2)

在库存Laravel中,您可以在模型上调用update(),默认情况下它不会验证,这将为您提供所描述的所需行为。在您发布的代码中,您明确地覆盖了update()方法以强制进行验证。

在您发布的代码中,有两种方法可以使“user”字段可选:

  1. 请勿在该字段的$规则中设置“required”。

    'user'  => 'unique:users|alpha_num',
    
  2. 在更新之前,请勿覆盖update()方法强制验证。

答案 2 :(得分:0)

怎么样:

private static $rules = array(
    'user'  => 'unique:users|required|alpha_num',
    'email' => 'required|email'
);
private static $update_rules = array(
    'user'  => 'required|alpha_num',
    'email' => 'required|email'
);

* Validate against registration form */
public static function register($data)
{
    $validator = Validator::make($data, static::$rules);
    if($validator->fails())
    {
        /*... do someting */
    }
    else
    {
        /* .. do something else */
    }
}

/* Validate against update form */
public static function update($data)
{
    $validator = Validator::make($data, static::$update_rules);
    if($validator->fails())
    {
        /*... do someting */
    }
    else
    {
        /* .. do something else */
    }
}