1

1つのchoices要素を持つ単純なsmyfony2フォームがあります。「灯油」または「ディーゼル」を選択すると、フォームが検証されません。正しい内容です。3つのオプションのいずれも選択せず、フォームを空で送信しない場合、$ form-> validate()はtrueを返しますが、そうではありません。何か案は?必要なHTML5を使用することは、私にとって解決策ではありません。

これは私のフォームAbstractTypeです:

public function buildForm(FormBuilderInterface $builder, array $options)
{

    // Form erzeugen
    $builder->add('treibstoff', 'choice', array(
            'choices' => array(
                    'kerosin' => 'form.quiz1.kerosin',
                    'benzin' => 'form.quiz1.benzin',
                    'diesel' => 'form.quiz1.diesel',
                ),
            'multiple' => false,
            'expanded' => true,
            'label' => ' '
        ))
        ->getForm();
}

public function setDefaultOptions(OptionsResolverInterface $resolver)
{

    // Validierung erzeugen
    $collectionConstraint = new Collection(array(
        'treibstoff' => array(
                new Choice(array(
                    'choices' => array('benzin'),
                    'message' => 'form.quiz.falscheantwort',
                    'strict' => true
                )
            )
        )
    ));

    $resolver->setDefaults(array(
        'validation_constraint' => $collectionConstraint
    ));
}

public function getName()
{ 
     ...

検証は次のように機能します。

    if($Request->getMethod() == "POST") {
        $form->bind($Request);
        if($form->isValid()) {
            echo "valid";

前もって感謝します。

編集:

提案されたようにsetDefaultOptionsを変更し、NotBlankを追加しました。それは私のためにうまくいきました:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{

    // Validierung erzeugen
    $collectionConstraint = new Collection(array(
        'treibstoff' => array(
            new Choice(array(
                    'choices' => array('benzin'),
                    'message' => 'form.quiz.falscheantwort',
                    'strict' => true,
                )
            ),
            new NotBlank()
        )
    ));

    $resolver->setDefaults(array(
        'validation_constraint' => $collectionConstraint
    ));
}
4

1 に答える 1

3

有効な選択肢のみをbenzinに設定しましsetDefaultOptionsたが、フィールドを必須として指定しませんでした。requiredフォームフィールドでHTML5検証を設定するのは:のみであることに注意してください。

また、必須オプションをtrueに設定しても、サーバー側の検証は適用されないことに注意してください。言い換えれば、ユーザーがフィールドに空白の値を送信した場合(たとえば、古いブラウザーまたはWebサービスを使用して)、SymfonyのNotBlankまたはNotNull検証制約を使用しない限り、その値は有効な値として受け入れられます。

したがって、フィールドにもNotBlank制約を追加する必要がありtreibstoffます。

于 2012-08-12T12:30:50.793 に答える