即使不需要表单元素,有没有办法让验证器触发?
我有一个表单,我想验证texbox的内容(确保不为空),如果另一个表单元素的值(这是一对单选按钮)选择了特定值。现在我通过覆盖我的表单类的isValid()函数来实现这一点,它运行得很好。但是,我想将其移动到验证器上或使用Callback验证器。这是我到目前为止所拥有的,但它似乎永远不会被调用,除非我将字段更改为setRequired(true),我不想一直这样做,只有当另一个表单元素的值设置为特定时才值。
// In my form class's init function
$budget = new Zend_Form_Element_Radio('budget');
$budget->setLabel('Budget')
->setRequired(true)
->setMultiOptions($options);
$budgetAmount = new Zend_Form_Element_Text('budget_amount');
$budgetAmount->setLabel('Budget Amount')
->setRequired(false)
->addFilter('StringTrim')
->addValidator(new App_Validate_BudgetAmount());
//Here is my custom validator (incomplete) but just testing to see if it even gets called.
class App_Validate_BudgetAmount extends Zend_Validate_Abstract
{
const STRING_EMPTY = 'stringEmpty';
protected $_messageTemplates = array(
self::STRING_EMPTY => 'please provide a budget amount'
);
public function isValid($value)
{
echo 'validating...';
var_dump($value);
return true;
}
}
答案 0 :(得分:3)
看起来如果使用setAllowEmpty(false)代替setRequired(false),那么你的验证器仍会被调用。所以我现在有:
$budgetAmount->setLabel('Budget Amount')
->setAllowEmpty(false)
->addFilter('StringTrim')
->addValidator(new App_Validate_BudgetAmount());
它工作得很好