Laravel 9 required_if not validating



我使用的是Laravel 9和Livewire 2.0

我有一个名为'new_weight'的整数字段,如果布尔复选框'剥离'被选中,应该验证所需。虽然' stripping '没有被选中,但它仍然按要求进行验证。验证$rules正在被命中,因为如果我删除规则,它根本不会验证。

我最近还注意到,如果我在选中复选框时死亡并转储'$this-> stripping ',它会将'true'而不是'1'转储到控制台,但如果我不选中,它会转储'0'——不确定这是否重要。

edit。

...
protected $rules = [
'car_color' => 'required|string',
'new_weight' => 'required_if:stripped,accepted|integer|min:1|max:999',
];

protected $messages = [
'car_color' => 'Please enter car color.',
'new_weight' => 'New Weight Value must be great than 1 but less than 999'
];
...

edit.blade.php

...
<div class="flex items-center h-5">
<input wire:model.defer="stripped" id="stripped" name="stripped"
wire:click="updateStripped"
type="checkbox">
</div>
<div>
<input wire:model.defer="new_weight" id="new_weight" name="new_weight"
type="text"
placeholder="New Vehicle Weight in lbs:">
</div>
...

由于剥离本身不是规则,因此我会考虑使用自定义回调来计算剥离的输入。

'new_weight' => [
Rule::requiredIf(function () use ($request) {
return $request->input('stripped');
}),
'integer|min:1|max:999'
]

我也有这个问题,所以我使用Rule::when这样,并得到我相同的结果:

[Rule::when(this->stripped == 'accepted', 'required|integer|min:1|max:999')]

当condition (this-> stripping == 'accepted')为真时,规则运行

当然,如果stripped是一个复选框,你必须找出它返回的是什么,所以首先使用dd,然后用'accepted'替换它(我认为复选框返回真和假)

new_weight字段在数据库中有一个默认的null值。一旦我使用默认的空值重新迁移,我的问题就解决了。

最新更新