请考虑以下情形:
这是需要验证的请求正文。
{
"cart": [
{
"product_id": 1,
"qty": 2,
"schedule": "2018-07-15"
},
{
"product_id": 2,
"qty": 5,
"schedule": "2018-07-15"
}
]
}
以下是验证规则。
public function rules()
{
return [
'cart' => "required|array",
'cart.*.schedule' => "required|date",
'cart.*.qty' => "required|integer|max:5",
'cart.*.product_id' => "required|exists:product,id",
];
}
到目前为止,太好了。我只需要为cart.*.product_id
添加另一条规则来检查相应的cart.*.schedule
中是否有该产品,所以我创建了一个名为OnSchedule
的自定义规则。
class OnSchedule implements Rule
{
public function passes($attribute, $value)
{
// $attribute will be like cart.0.product_id
// I need to know the value of cart.0.schedule
}
public function message()
{
return ":attribute is not available for this schedule";
}
}
现在是问题所在,我该如何检索位于schedule
相同节点内的product_id
的当前值。顺便说一句,这是更新的rules()
函数。
public function rules()
{
return [
'cart' => "required|array",
'cart.*.schedule' => "required|date",
'cart.*.qty' => "required|integer|max:5",
'cart.*.product_id' => [
"required", "exists:product,id", new OnSchedule
],
];
}