1

重複の可能性:
Symfony の別のフィールド値に応じてフィールドを検証する

ラジオボタン R がチェックされているときに A e B という名前のフォームフィールドを設定解除するにはどうすればよいですか? 通常、バリデーターをこれらの A/B フィールドに設定したいのですが、ラジオボタン R がチェックされている場合はバリデーターのチェックをスキップ (および値の設定を解除) したいと思います (たとえば、A と B を必要な文字列として設定しますが、R の場合はそれらを検証します)。空であってもチェックされます)。

doBind 関数をオーバーライドしようとしました。プリ/ポスト バリデータを使用しましたが、引き続き「必須」メッセージが表示されます

ありがとう!

4

1 に答える 1

3

正しい操作です。私はいくつか答えを見つけました。これを行うのに最適な場所は、関数をオーバーライドしbind、フォームの値に応じてバリデーターのオプションを再定義することです (必要なオプションを無効にするか、バリデーターを削除します)。

public function bind(array $taintedValues = null, array $taintedFiles = null)
{
  if($taintedValues["method"] == 'phone')
  {
    // disabled required
    $this->validatorSchema["email"]->setOption('required', false);
  }
  else
  {
    // remove the validator
    $this->validatorSchema['other_field'] = new sfValidatorPass();

    // and disabled required
    $this->validatorSchema["phone"]->setOption('required', false);
  }

  return parent::bind($taintedValues, $taintedFiles);
}
于 2012-05-20T13:19:10.023 に答える