【问题标题】:Zend Framework Form Element Validators - validate a field even if not requiredZend Framework 表单元素验证器 - 即使不需要也验证字段
【发布时间】:2010-06-09 18:04:27
【问题描述】:

即使不需要表单元素,有没有办法让验证器触发?

如果另一个表单元素(几个单选按钮)的值选择了特定值,我有一个表单,我想在其中验证 texbox 的内容(确保不为空)。现在我通过覆盖我的表单类的 isValid() 函数来做到这一点,它工作得很好。但是,我想将其移至其 on 验证器或使用 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;
    }
}

【问题讨论】:

    标签: zend-framework validation customvalidator


    【解决方案1】:

    看起来如果你使用 setAllowEmpty(false) 代替 setRequired(false) 那么你的验证器仍然会被调用。所以我现在有:

    $budgetAmount->setLabel('Budget Amount')
        ->setAllowEmpty(false)
        ->addFilter('StringTrim')
        ->addValidator(new App_Validate_BudgetAmount());
    

    而且效果很好

    【讨论】:

    • 不应该是setAllowEmpty(true) 吗?
    • 它的 setAllowEmpty(FALSE) 似乎具有误导性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多