2017-11-28 10 views
1

私はsymfonyバリデーターに助けが必要です。配列内の特定の値だけを検証することは可能ですか?たとえば、私は配列があります。symfonyバリデーション - 配列の一部だけ

'0' => [ 
    'interestidKey' => true, 
    'anotherInterestedKey' => 'foo' 
], 
'error' => [ 
    'errorMsg => 'not interest for me' 
] 

を私はバリ主値0でこの配列を検証する必要があります。配列に '0'キーが含まれているかどうかを知る必要があります。キーがある場合はinterestidKeyブール値です。私は常に配列のコレクションを使用しますが、ofcはerrorinterestidKeyが含まれていないというエラーが表示されるため、この場合は機能しません。

どうすればこの問題を解決できますか?

+0

あなたのアレイは一般的にどのように見えますか?それはちょうど0と 'エラー'キーですか?または、数値キーとエラーキーの任意の数がありますか? –

+0

任意の数字キーとエラーキー。 – KKKK

答えて

0

出荷時に設定されている箱の拘束条件で、あなたが望むことをすることができるとは確信していません。しかし、あなた自身で書くことで、あなたが望むことができるはずです:https://symfony.com/doc/current/validation/custom_constraint.htmlそれを見て、それがあなたを助けることができるかどうかを見てください。

あなたはあなたができる検証している場合:

if(array_key_exists(0, $array)) { 
    if(array_key_exists("interestid", $array[0])) { 
     return true; 
    } 
} else { 
    // do the error stuffs 
} 
0

あなただけ、あなたの配列をループを構築するキーをチェックし、それが数字キー(またはしないエラーキー)であれば可能性があなたを適用子供たちへの妥当性確認。これは次のようになります:

use Symfony\Component\Validator\Constraints as Assert; 

... 

$constraint = new Assert\Collection([ 
    'fields' => [ 
     // put any constraints for your objects here, keyed by field name 
     'interestidKey' => new Assert\Type('bool') 
    ], 
    'allowExtraFields' => true // remove if you don't want to allow other fields than specified above 
]); 

$violations = []; 
foreach($data as $key => $item) { 
    if ($key != 'error') { 
     $violations[$key] = $validator->validate($item, $constraint); 
    } 
} 
関連する問題