在模板中添加必需的true和render

时间:2011-11-26 13:46:41

标签: php symfony1 symfony-1.4

我在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中我想在开始时只渲染这个小部件,但是如果用户检查“否”,那么我想用文本框和这个来渲染小部件回答必须是required => true,而不是null。 制作它的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

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;
}

您可以找到更多here

答案 1 :(得分:0)

您可以使用jquery执行第一部分 - 观察yes_no字段中的更改并显示/隐藏answer字段。 然后使用自定义验证器,您可以进行所需的测试。