具有嵌套数组的自定义验证规则

时间:2016-08-23 08:37:16

标签: validation laravel

我正在尝试制定自定义验证规则来测试销售价格是否高于购买价格。但产品是嵌套数组。当运行调试器时,我可以正确地看到第一个参数的值('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',
}

提前致谢。

1 个答案:

答案 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;
});

显然,这个解决方案不是一个广泛的“大于”验证器,只适用于您的特定用例。