簡體   English   中英

如何使Laravel的Validator $規則可選?

[英]How to make Laravel's Validator $rules optional?

假設我有兩種方法的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
這甚至可能還是我錯過了什么?

對不起,我的英語不好。

不確定我的問題是否正確,但如果用戶是可選的,則應從驗證器中刪除“必需”。 這樣你就會:

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

我想這只是個人選擇,但我發現從方法中獲取驗證規則可以更好地控制我真正想要驗證的內容,尤其是當您想要執行一些高級驗證時。

希望它能幫到你。

在庫存Laravel中,您可以在模型上調用update() ,默認情況下它不會驗證,這將為您提供所描述的所需行為。 在您發布的代碼中,您明確地覆蓋了update()方法以強制進行驗證。

有兩種方法可以使您發布的代碼中的“用戶”字段可選:

  1. 不要在$ field中為該字段設置“required”。

     'user' => 'unique:users|alpha_num', 
  2. update()之前,請勿覆蓋update()方法以強制進行驗證。

怎么樣:

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 */
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM