13

アプリケーションのエンティティ内に次の変数を定義しました。フォーム インターフェイスを介して更新できる他のフィールドの中でも、これがあり、そのフォームでこのボックスをチェックおよびチェック解除できるようにしたいと考えています。

チェックボックスをオンにしてフォームを送信できますが、チェックボックスをオフにするとフォームを送信できないようです。それは私に与えますPlease check this box if you want to proceed

/**
 * @var boolean $updatesNeeded
 *
 * @ORM\Column(name="updates_needed", type="boolean", nullable=false)
 */
private $updatesNeeded;

nullable=falseスキーマの変更と更新を試みましnullable=trueたが、うまくいかないようです。どんなアイデアでも大歓迎です。

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class BlahType extends AbstractType
{
    /**
     * @param \Symfony\Component\Form\FormBuilder $builder
     * @param array                               $options
     */
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('stuff')
            ->add('updatesNeeded', 'choice', array('required' => false))
            ->add('anothervar');
    }
}
4

3 に答える 3

27

このエラーは、入力が HTML5 属性でマークされているために発生しますrequired="required"。フォーム タイプではrequired、このチェックボックスのオプションを false に設定することで、これを無効にすることができます。

$builder->add('updatesNeeded', 'choice', array('required' => false));

http://symfony.com/doc/current/book/forms.html#book-forms-html5-validation-disable

于 2012-06-28T19:32:32.130 に答える
-1

使用するだけではどうですかnullable=""

于 2012-06-28T19:29:47.650 に答える
-3

わかりました、間違ったバージョンのサイトを使用していたようです。言及されたすべての方法は機能します。将来このような問題に遭遇した人のために、以下にそれらを要約したいと思います.

ここでの問題は、HTML5 がフォーム自体を検証するのが好きでrequired="required"、フォーム入力に a を追加することです。通常、これはおそらく便利なことですが、チェックボックスのようなものについては、クライアント側でブラウザーが文句を言うことなく、チェックを外してフォームを送信するオプションが必要です。

この問題を解決するにはいくつかの方法があります。

1 つ目は、公式のsymfony docsで述べられているように、HTML5 を使用してフォームのすべての検証を単純に無効にすることです。

もう 1 つは、コメント内のエンティティ変数に情報を追加して、nullable=true. これにより、データベース内の対応する列に null 値を設定できますが、これは状況によっては望ましい場合と望ましくない場合があります。これを以下に示します。

/**
 * @var boolean $varName
 *
 * @ORM\Column(name="var_name", type="boolean", nullable=true)
 */
private $varName;

最後に、フォームを作成するときに、フォームの検証に使用できる特定のオプションがあります。ドキュメントは詳細を示し、より多くの例を示していますが、ここでの目的のために、重要な部分は、'required' => false以下に示すように設定できることです。

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class BlahType extends AbstractType
{
    /**
     * @param \Symfony\Component\Form\FormBuilder $builder
     * @param array                               $options
     */
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('stuff')
            ->add('checkbox_var', 'checkbox', array('required' => false))
            ->add('anothervar');
    }
}

この問題で私を助けてくれたすべての人に感謝します。今後このような問題に直面する方の参考になれば幸いです。

于 2012-06-29T16:17:06.043 に答える