2016-08-23 58 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