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