簡體   English   中英

Laravel 自定義驗證 - 獲取參數

[英]Laravel custom validation - get parameters

我想獲取驗證規則中傳遞的參數。

對於我創建的某些驗證規則,我可以從驗證規則中獲取參數,但對於少數規則,它無法獲取參數。

在模型中,我使用以下代碼:

public static $rules_sponsor_event_check = array(
    'sponsor_id' => 'required',
    'event_id' => 'required|event_sponsor:sponsor_id'
);

在 ValidatorServiceProvider 中,我使用以下代碼:

    Validator::extend('event_sponsor', function ($attribute, $value, $parameters) {
        $sponsor_id = Input::get($parameters[0]);
        $event_sponsor = EventSponsor::whereIdAndEventId($sponsor_id, $value)->count();

        if ($event_sponsor == 0) {
            return false;
        } else {
            return true;
        }
    });

但是在這里我無法使用以下內容獲取贊助商 ID:

$sponsor_id = Input::get($parameters[0]);

作為第四個,整個驗證器被傳遞給你用extends定義的閉包。 您可以使用它來獲取所有經過驗證的數據:

Validator::extend('event_sponsor', function ($attribute, $value, $parameters, $validator) {
    $sponsor_id = array_get($validator->getData(), $parameters[0], null);
    // ...
});

順便說一下,如果傳遞的輸入名稱不存在,我在這里使用array_get來避免任何錯誤。

http://laravel.com/docs/5.0/validation#custom-validation-rules

自定義驗證器閉包接收三個參數:被驗證的 $attribute 的名稱、屬性的 $value 和傳遞給規則的 $parameters 數組。

為什么Input::get( $parameters ); 然后? 你應該檢查 $parameters 內容。

編輯。 好的,我知道你想做什么。 如果您嘗試獲取的值未提交,您將不會從輸入中讀取任何內容。 看看

dd(Input::all());

然后你會發現

sponsor_id=Input::get($parameters[0]);

在提交sponsor_id的地方工作。

暫無
暫無

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

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