2

Symfony 2.0で(エンティティなしで)埋め込まれたフォームのコレクションを検証するにはどうすればよいですか?解決策がその線に沿っている場合、2.1へのアップグレードは現時点では便利なオプションではありません。

Valid制約を使用しようとしましたが、代わりにすべての検証が失敗しました。

public function getDefaultOptions(array $options)
{
    $collectionConstraint = new Collection(array (
        ...

        // I tried Valid constraint but this "removes" all validation
        'travel_links' => new Valid(),
    ));

    return array ('validation_constraint' => $collectionConstraint);
}
4

2 に答える 2

2

Symfony 2.1では、制約オプションを使用できます。

$builder
->add('firstName', 'text', array(
   'constraints' => new Length(array('min' => 3)),
))
->add('lastName', 'text', array(
   'constraints' => array(
       new NotBlank(),
       new Length(array('min' => 3)),
),
));

明らかに、それはSymfony2.0では機能しません。ただし、 validation_constraintと呼ばれる限定された制約オプションがSymfony2.0で利用可能です。

$builder
->add('firstName', 'text', array(
   'validation_constraint' => new Length(array('min' => 3)),
));

複数の条件(NotBlank、Lenghtなど)を検証する必要がある場合は、すべての検証を一度に実行するカスタム制約を定義して、自分で解決することができます。:)

use Symfony\Component\Validator\Constraints\Length編集:使用している制約を含めることを忘れないでください。:)

于 2013-02-12T20:43:53.990 に答える
0

Symfony2.x の実際のバージョンでは、cascade_validation を true に設定できます (デフォルトでは false) http://symfony.com/doc/current/reference/forms/types/form.html

ドキュメントには次のように書かれています:「このオプションを true に設定すると、埋め込みフォーム タイプの検証が強制されます。たとえば、ProductType に CategoryType が埋め込まれた ProductType がある場合、ProductType で cascade_validation を true に設定すると、CategoryType からのデータも検証されます。

このオプションを使用する代わりに、モデルで Valid 制約を使用して、プロパティに保存されている子オブジェクトの検証を強制することもできます。」

于 2014-10-06T10:31:15.683 に答える