2016-08-23 47 views
0

我正在尝试执行自定义验证规则以测试销售价格是否高于购买价格。但是这些产品进入了一个嵌套数组。运行调试器时,我可以正确地看到第一个参数的值('price_purchase')与他的值,但第二个参数($ price_sell)具有“原始数据”'products。*。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

试试这个:

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

显然这个解决方案是不是一个广泛的“大于”校验和仅适用于您的具体使用情况。

+0

非常感谢老兄! array_get是方式:) – jnieto