Validation 只有选中复选框时,zend_表单集字段才是必需的

Validation 只有选中复选框时,zend_表单集字段才是必需的,validation,zend-form,Validation,Zend Form,我正在使用Zend_表单和注册页面。我有一个复选框,如果选中,将显示其他帐单字段。在我的表单实例中,如果选中该复选框,我只希望这些额外字段设置为必需(true)。有办法做到这一点吗?现在的问题是,我必须将所有账单字段设置为setRequired(false),但是如果用户选中复选框,逻辑将不关心字段是否为空,因为它们不是必需的 好的,下面是我最后要做的。我将账单信息创建为Zend_Form_子表单,并将其添加到主注册表表单中。然后,在我的控制器中的post上,我检查复选框是否被选中。如果不是,则

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


好的,下面是我最后要做的。我将账单信息创建为Zend_Form_子表单,并将其添加到主注册表表单中。然后,在我的控制器中的post上,我检查复选框是否被选中。如果不是,则从主窗体中删除子窗体并验证窗体。如果出现错误,我会重新添加子表单,以便在重新绘制表单时显示字段。希望这会对某人有所帮助。

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

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

    }
}

在使用$form->isValid($formData)进行验证之前,为什么不简单地检查是否已发布帖子(如果这是表单的方法),如果是,则查看checkbox的值并将所有元素的required设置为false(可能便于将它们保留在数组中)

例如:

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