我正在尝试构建一个html表单(需要足够的标记让zend使用装饰器生成它是不可行的),并且我在输入值元素中使用$this->signupForm->getValue('fieldName')
。
表单类正常创建元素并添加到表单中,当我显示此表单时,字段正常工作。
但是,使用getValue方法,我的表单字段值的一半是“0”。我做了一个类型检查,以确保它们不是null,但getValue实际上返回一个字符串“0”。
没有设置默认值。唯一似乎相关的是,所有具有默认值“0”的字段都在扩展父类的子类中定义。但是,将字段移动到父类似乎没有影响(缓存清除等)。
这些可以让您了解表单类的结构:
class Form_Signup extends Base_Form_Signup {
public function __construct($options = null) {
parent::__construct($options);
$address = $this->createElement('checkbox', 'address');
$address->setLabel('Address')->setRequired(true);
// Add our elements
$this->addElement($address);
}
}
class Base_Form_Signup extends Zend_Form {
public function __construct($options = null) {
parent::__construct($options);
// fields defined here do not show 0
// Add our elements
$this->addElement( // adding our elements );
}
}
答案 0 :(得分:2)
由于构造函数在Zend_Form中的工作方式,我认为您遇到了问题。我认为在每个类的构造函数中调用默认装饰器会导致某些事情被覆盖/取消。
尝试使用init()
方法,因为该课程旨在使用:
class Form_Signup extends Base_Form_Signup {
public function init() {
parent:: init();//may be needed, may not
$address = $this->createElement('checkbox', 'address');
$address->setLabel('Address')->setRequired(true);
// Add our elements
$this->addElement($address);
}
}
class Base_Form_Signup extends Zend_Form {
public function init() {
// Add our elements
$this->addElement( // adding our elements );
}
}
如果你真的需要,你仍然可以将$options
数组传递给构造函数,但是使用setOptions()
可能会更好。