2

假设我有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.
这甚至可能还是我错过了什么?

对不起,我的英语不好。

4

3 回答 3

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'
        );
    }
}

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

希望它可以帮助你。

于 2013-08-26T15:30:59.493 回答
2

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

有两种方法可以使您发布的代码中的“用户”字段成为可选字段:

  1. 不要在该字段的 $rules 中设置“必需”。

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

于 2013-08-26T15:29:21.460 回答
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 */
    }
}
于 2015-10-16T11:20:53.017 回答