我在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。
制作它的最佳方法是什么?
答案 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
字段。
然后使用自定义验证器,您可以进行所需的测试。