我正在尝试制定自定义验证规则来测试销售价格是否高于购买价格。但产品是嵌套数组。当运行调试器时,我可以正确地看到第一个参数的值('price_purchase')和他的值,但第二个参数($ price_sell)具有“原始数据”'产品。*。purchase_price'而不是相应的值。怎么办呢?我试着用一些棘手的东西来做到这一点:
$i = explode('.', $attribute);
$i = $i[1];
$input = $validator->getData();
获取迭代器并手动测试......但不是正确的方法。
以下是示例:
public function boot()
{
Validator::extend('greater_than', function($attribute, $price_purchase, $price_sell, $validator)
{
$result = floatval($price_purchase) > floatval($price_sell);
return $result;
});
}
public function validateStore($params) {
'products.*.selling_price' => 'greater_than:products.*.purchase_price',
}
提前致谢。
答案 0 :(得分:1)
试试这个:
Validator::extend('greater_than', function($attribute, $value, $parameters, $validator)
{
$wildCard = explode('.', $attribute);
$wildCard = $wildCard[1];
$compareAttribute = str_replace('*', $wildCard, $parameters[0]);
$compareValue = array_get($validator->getData(), $compareAttribute);
$result = floatval($value) > floatval($compareValue);
return $result;
});
显然,这个解决方案不是一个广泛的“大于”验证器,只适用于您的特定用例。