仅当选中复选框时,zend_form才设置所需的字段

时间:2010-09-08 22:37:25

标签: validation zend-form

我正在使用Zend_Form和注册页面。我有一个复选框,如果选中,则会显示其他结算字段。在我的表单实例中,如果选中该复选框,我只希望这些额外字段为setRequired(true)。有没有办法做到这一点?现在的问题是我必须将所有计费字段设置为setRequired(false),但如果用户选中该复选框,逻辑将不关心字段是否为空,因为它们不是必需的。

alt text

3 个答案:

答案 0 :(得分:1)

我有同样的问题,我结束了自己的验证器编写:

<?
class Mh_Validator_RequiredIfCheckbox extends Zend_Validate_Abstract
{
    const SHOULD_BE_NOT_EMPTY = 'shouldBeNotEmpty';

    private $_field;
//protected $_field;
public function __construct($field)
{
    $this->_field = $field;
}    

    protected $_messageTemplates = array(
    self::SHOULD_BE_NOT_EMPTY =>"This field is required"
    );

    /**
     * Defined by Zend_Validate_Interface
     *
     * @param  string $value
     * @return boolean
     */

    public function isValid($value, $context = null)
    {

        if($context[$this->_field]==0 && $value == null)
        {
            $this->_error(self::SHOULD_BE_NOT_EMPTY);
            return false;
        }
    return true;

    }
}

答案 1 :(得分:0)

好的,所以这就是我最终做的事情。我将结算信息创建为Zend_Form_SubForm并将其添加到主Register表单中。然后,在我的控制器中,在帖子上,我检查是否选中了复选框。如果不是,那么我从主窗体中删除子窗体并验证窗体。如果出现错误,则重新添加子表单,以便在重新绘制表单时显示字段。希望这会对某人有所帮助。

答案 2 :(得分:-1)

为什么不简单地检查POST是否已经发出(如果这是你的表单的方法),如果是这样的话,看看复选框的值,并在验证之前为所有元素设置必需为false(可能方便将它们保存在数组中) $形式 - &GT;?的isValid($ FORMDATA)

示例:

if ($this->getRequest()->isPost()) {
    $formData = $this->getRequest()->getPost();
    if ($formData['billing_information_different'] == '1') {
        $billingElement1->setRequired(true);
        $billingElement2->setRequired(true);
    }
}