簡體   English   中英

檢查 Laravel 表單請求驗證中是否存在嵌套值

[英]Check existence of nested value in Laravel Form Request Validation

我有以下驗證規則:

[
    MenuItem::MENU_ITEM_NAME        => 'required|unique:menu_items,name',
    MenuItem::MENU_ITEM_DESCRIPTION => 'nullable',
    MenuItem::MENU_ITEM_CATEGORY    => 'required|exists:categories,id',
    MenuItem::MENU_ITEM_SIDE        => 'nullable|boolean',
    MenuItem::MENU_ITEM_SIDE_ONLY   => 'nullable|boolean',
    MenuItem::MENU_ITEM_IMAGE       => 'nullable',
    MenuItem::MENU_ITEM_AVAILABLE   => 'nullable|boolean',
    MenuItem::MENU_ITEM_ACTIVE      => 'nullable|boolean',
    MenuItem::MENU_ITEM_PRICING     => 'required',
]

他們工作正常,直到我需要實現這個測試用例:

定價又名MenuItem::MENU_ITEM_PRICING是一個數組數組。 我需要檢查當MenuItem::MENU_ITEM_SIDE被傳遞為truepricing數組必須包含一個子數組,其中包含該特定項目的一些值。

前任:

[
    MenuItem::MENU_ITEM_SIDE => false,
    MenuItem::MENU_ITEM_PRICING => []
]

前面的例子是有效的。 但:

[
    MenuItem::MENU_ITEM_SIDE => true,
    MenuItem::MENU_ITEM_PRICING => []
]

無效,應該是:

[
    MenuItem::MENU_ITEM_SIDE => false,
    MenuItem::MENU_ITEM_PRICING => [['sideprice' => 2.20]]
]

我如何檢查(在我的FormRequest類中)如果MenuItem::MENU_ITEM_SIDE == true那么MenuItem::MENU_ITEM_PRICING應該包含一個名為sideprice的鍵的子sideprice

您可以表單請求中添加after 鈎子,只需像這樣覆蓋withValidator方法:

/**
 * Configure the validator instance.
 *
 * @param  \Illuminate\Validation\Validator  $validator
 * @return void
 */
public function withValidator($validator)
{
    // Check using `sometimes` method
    $validator->sometimes("{MenuItem::MENU_ITEM_PRICING}.*.sideprice", 'required', function ($input) {
        return $input->${MenuItem::MENU_ITEM_SID};
    });

    // Or check using `after` method
    $validator->after(function ($validator) {
        if ($this->input(MenuItem::MENU_ITEM_SID, false)
            && ! \Illuminate\Support\Arr::has($this->input(MenuItem::MENU_ITEM_PRICING, []), '*.sideprice')) {
            $validator->errors()->add('field', 'Something is wrong with this field!');
        }
    });
}

注意:我還沒有完全測試過這個,但它給了你這個想法。

暫無
暫無

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

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