0

我正在尝试构建一个 html 表单(需要足够的标记,让 zend 使用装饰器生成它是不可行的),并且我$this->signupForm->getValue('fieldName')在输入值元素中使用。

表单类正常创建元素并添加到表单中,当我显示此表单时,字段工作正常。

但是,使用 getValue 方法,我的表单字段值的一半是“0”。我进行了类型检查以确保它们不为空,但 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 );

    }
}
4

1 回答 1

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().

于 2013-01-26T09:50:25.303 回答