2017-03-01 4 views
1

コレクション制約を使用してスカラーを検証しようとすると、symfonyバリデーターが例外をスローします。代わりに違反を返すと思います。symfonyバリデーターが無効なコレクションで例外をスローする

例コード:

use Symfony\Component\Validator\Validation; 
use Symfony\Component\Validator\Constraints\Length; 
use Symfony\Component\Validator\Constraints\Collection; 

$validator = Validation::createValidator(); 

$input = 'testtesttest'; 
$constraints = [ 
    new Collection([ 
     'fields' => [ 
      'one' => new Length(array('min' => 10)) 
     ] 
    ]) 
]; 

$violationList = $validator->validate($input, $constraints); 

PHP Fatal error: Uncaught Symfony\Component\Validator\Exception\UnexpectedTypeException: Expected argument of type "array or Traversable and ArrayAccess", "string" given in vendor/symfony/validator/Constraints/CollectionValidator.php:37 

を投げる私はここで何か間違ったことをやっていますか?

他のConstraintクラス(NotBlank、Typeなど)の場合、バリデータは無効なものが発生した場合に違反リストに追加します。コレクションの場合に例外をスローするには、私にとって奇妙なようです。明らかに間違ったことをしていますか?

答えて

0

Collectionという制約を悪用しています。この制約は、コレクション(例えば、配列、トラバース可能なオブジェクト)を検証するためのものです。

バリデーションの配列をvalidateメソッドに渡す必要があります。

例:

use Symfony\Component\Validator\Validation; 
use Symfony\Component\Validator\Constraints\Length; 

$validator = Validation::createValidator(); 

$input = 'testtesttest'; 
$constraints = [ 
    new Length(array('min' => 10)), 
    // ... And other constraints 
]; 

$violationList = $validator->validate($input, $constraints); 

あなたがここにバリデータについての詳細情報を確認できます。私はそれがコレクションを検証するためのものだということを理解、それは無効なコレクションを取得する場合、私はそれを期待するhttps://symfony.com/doc/current/components/validator.html#usage

+0

を違反を返し、例外をスローしない。 –

+0

例えば '$ array = ['x' => ['a' =>(int)、 'b' =>(string)]]'のような配列を期待しているとします。 $ array ['x']の値が適切であることを確認するためにCollection制約を使用する必要がありますが、入力として '['x' => 5]を取得すると、バリデータは –

+0

になります。データのスキーマではなく、データを検証します。バリデーションの周りでいつでも 'try {...} catch(){}'を行うことができます。 – Fracsi

関連する問題