1

3つのチェックボックス(A、B、C)を含むSymfony2フォームがあり、フォームを検証するためにユーザーに少なくとも1つのチェックボックスをオンにしてもらいたいとしましょう。したがって、任意の組み合わせ([A]、[B]、[C] 、[A、B]、[A、C]、[B、C]、[A、B、C])はtrueを返し、選択しない[]はfalseを返します。

DoctrineオブジェクトでSymfonyバリデーターを使用してこれを達成するための正しいアプローチは何ですか?

編集
各チェックボックスは、Doctrineを使用してデータベース内の独自の列にマップされます@ORM\Column(type="boolean")

4

3 に答える 3

3

オプションのリストに選択フィールドタイプを正しく使用している場合は、次を使用できますChoiceValidator

@Assert\Choice(min=1, minMessage = "You must choose at least one option.")

ドキュメントから:

multipleオプションがtrueの場合、minオプションを使用して、少なくともXX個の値を強制的に選択できます。たとえば、minが3であるが、入力配列に有効な項目が2つしかない場合、検証は失敗します。

于 2012-10-22T22:34:09.840 に答える
1

問題が解決しました。Symfony2 Class Constraint Validatorのドキュメントと、検証サブパスをUPGRADE-2.1.mdに設定するための変更に関する追加情報に基づいて

い ます。エンティティクラスに以下を追加しました。

class Message
{

  // ...

  // check if user selected at least one network to publish the message
  public function isNetworkSelected(ExecutionContext $context)
  {
    if (!$this->network_twitter && !$this->network_facebook && !$this->network_googleplus)
    {
      $context->addViolationAtSubPath('network_facebook', 'Please select at least one network', array(), null);
    }
  }

  // ...

}

validation.yml

MY\MessageBundle\Entity\Message
    constraints:
        - Callback:
            methods:   [isNetworkSelected]
于 2012-10-22T23:45:55.170 に答える
0

ボタンコントロールはありますか?その場合、クリックイベントで、選択が行われているかどうかを確認し、選択されている場合はtrueを返し、そうでない場合はfalseを返します。

于 2012-10-22T21:11:55.587 に答える