Добавьте требуемое значение true и визуализируйте в шаблоне - PullRequest
0 голосов
/ 26 ноября 2011

У меня есть в schema.yml:

Quest:
  columns:
    yes_no:  { type: boolean, notnull: true }
    answer:   { type: string(100), notnull: false }

и QuestForm

$this->widgetSchema['yes_no'] = new sfWidgetFormSelectRadio(array('choices' => array(1 => 'yes', 0 => 'no')));

В шаблоне default Я хотел бы отображать только этот виджет при запуске, но если пользователь проверяет "нет", то я хотел бы также отобразить виджет answer с текстовым полем, и это должно быть required => true, не ноль. Какой лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 28 ноября 2011

Подобно Symfony, это достигается с помощью PostValidator!

Сначала, как упомянул @samura, спрячьте и наблюдайте виджет ответа с помощью (например) jQuery, затем используйте PostValidator.

// Form.class.php
/* ..... */
$this->validatorSchema->setPostValidator(
    new sfValidatorCallback(array('callback' => array($this, 'checkAnswer')))
);

Затем внедрите свой валидатор

// Form.class.php something else
public function checkAnswer($validator, $values)
{
   if (($values['yes_no'] == '0') && (empty($values['answer')))
   {
       $error = new sfValidatorError($validator, 'Invalid answer');

       // throw answer error
       throw new sfValidatorErrorSchema($validator, array('answer' => $error));
   }

   return $values;
}

Вы можете найти больше здесь

0 голосов
/ 26 ноября 2011

Вы можете выполнить первую часть с помощью jquery - посмотрите на поле yes_no на предмет изменений и покажите / скройте поле answer.Затем с помощью специального валидатора вы можете провести необходимое тестирование.

...