2016-08-23 16 views
0

私は販売価格が購入価格よりも高いかどうかをテストするカスタム検証ルールを実行しようとしています。しかし、製品は入れ子配列になっています。デバッガを実行すると、最初のパラメータの値が正しい値( 'price_purchase')であることがわかりますが、2番目のパラメータ($ price_sell)には対応する値ではなく、 "raw data"どのようにこれを行うことができますか?私のようなトリッキーなものであることを行うにトラインよ:手動でイテレータとテストを取得するためにネストされた配列を使用したカスタム検証規則

$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', 
} 

ありがとう:ここ

は一例です。

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

明らかに、このソリューションは、バリデータの広範な「より大きい」ではありませんし、あなただけの特定のユースケースのために働く:

答えて

1

はこれを試してみてください。

+0

ありがとうございました。 array_getは方法です:) – jnieto

関連する問題