簡體   English   中英

Laravel驗證:required_if中的規則

[英]Laravel validation: rules in required_if

我有一個選擇列表,其中第一個選項被禁用,這樣,當用戶未選擇有效選項時,選擇列表的結果將不在請求中。

在驗證中,該字段是必填字段,例如,如果另一個字段的值是: 1, in case not 1, the field is not required

編碼:

'city_id' => [
'required',
'integer',
Rule::in(City::availableCities()),
],
'district_id' => new DistrictValidation(request('city_id')),

我該怎么做,無論是否在請求中, district_id每次都會引發驗證。

感謝您的回答,

更新:如果DistrictValidation規則在此處,則您可能會清楚地看到:

class DistrictValidation implements Rule
{
    protected $city;
    private $messages;

    /**
     * Create a new rule instance.
     *
     * @param $cityId
     */
    public function __construct($cityId)
    {
        $this->city = City::find($cityId);
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        dd('here');
        if (!$this->city) {
            return false;
        }

        if (!$this->city->hasDistrict) {
            return true;
        }

        $validator = Validator::make([$attribute => $value], [
            $attribute => [
                'required',
                'integer',
                Rule::in(District::availableDistricts()),
            ]
        ]);

        $this->messages = $validator->messages();

        return $validator->passes();
    }
    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
       return optional($this->messages)->first('district_id');
    }
}

嘗試這個:

'city_id' => [
  'nullable',
  'numeric',
  Rule::in(City::availableCities())
],
'district_id' => new DistrictValidation(request('city_id')),

嘗試這個 :

$myValidations = [
    "city_id" => [
        "required",
        "integer"
    ]
]

// if city_id exists in availableCities so add some rules 
if(collect(city::availableCities)->contains(request("city_id"))){
    $myValidations["district_id"] = new DistrictValidation(request('city_id'))
}

// validate request fields with $myValidations variable

嘗試使用required_if驗證,其中的驗證字段必須存在,並且如果anotherfield字段等於任何值,則不為空。

required_if:field,value,...

像這樣使用它:

$request->validate([ 'city_id' => 'required|integer|Rule::in(City::availableCities())', 'district_id' => 'required_if:city_id,1', ]);

嘗試在此處閱讀更多laravel驗證

您可以使用在laravel驗證中定義的required_if條件。這是正確的文檔Laravel驗證的鏈接

Validator::make($data, [
    'city_id' => [
        'required',
        'integer',
        Rule::in(City::availableCities()),
    ],
    'district_id'=>[
         'required_with:city_id,',
    ]
]);

暫無
暫無

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

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