Php 在模板中添加所需的true和render

Php 在模板中添加所需的true和render,php,symfony1,symfony-1.4,Php,Symfony1,Symfony 1.4,我在schema.yml中有: Quest: columns: yes_no: { type: boolean, notnull: true } answer: { type: string(100), notnull: false } 和任务形式 $this->widgetSchema['yes_no'] = new sfWidgetFormSelectRadio(array('choices' => array(1 => 'yes', 0 =&g

我在schema.yml中有:

Quest:
  columns:
    yes_no:  { type: boolean, notnull: true }
    answer:   { type: string(100), notnull: false }
和任务形式

$this->widgetSchema['yes_no'] = new sfWidgetFormSelectRadio(array('choices' => array(1 => 'yes', 0 => 'no')));
在模板
default
中,我希望在开始时仅呈现此小部件,但如果用户选中“否”,则我还希望呈现小部件应答,并使用文本框,并且该文本框必须为
必需=>true
,而不是null。
最好的方法是什么?

您可以使用jquery完成第一部分-观察
yes\u no
字段的更改,并显示/隐藏
答案
字段。
然后,使用自定义验证器,您可以进行所需的测试。

Symfony like,这是通过后验证器实现的

首先,正如@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;
}

您可以找到更多信息

如何创建这些验证程序?当用户选中“否”时,表单已经呈现,因此现在说您也要呈现应答小部件已经太迟了。