zend_form访问父表单元素

时间:2010-01-12 02:22:38

标签: zend-framework inheritance zend-form subclass

我找不到有关如何在子类表单中使用父表单元素的任何参考。可能是因为除了我以外,每个人都很明显。这让我很难过。这就是我的尝试。

首先,在我的表单构造函数中,我调用了

parent::__construct($options = null);

然后访问像这样的父元素

$type = parent::setName($this->type);

问题是所有父表单元素都会显示是否显式调用。有人说,“不要使用__construct(),而是使用init()函数。所以我将构造函数更改为init(),注释掉父构造函数,然后运行表单。它轰炸说它无法通过setName()的空值。我注释掉了所有seName()调用和表单,但只显示了以子类形式实例化的元素。

我的问题是:如果我不使用父构造函数,我如何获取并使用父元素的表单元素?

解决:由于构造函数已切换到init,因此还需要切换对父级的调用。容易有php背景的人。对于没有这样做的人来说,并非如此。

使用

parent::init();

2 个答案:

答案 0 :(得分:1)

解决:由于构造函数已切换到init,因此还需要切换对父级的调用。容易有php背景的人。对于没有这样做的人来说,并非如此。

使用

父::的init();

答案 1 :(得分:-1)

您应该首先学习OOP原则。显然你对它一无所知。您需要在编写Form_Class :: init()方法时调用parent :: init(),但为什么?因为否则不调用父方法,并由From_Class方法覆盖。

其他的事情是当你有一个带有输入和提交的父类“SuperForm”时,你的“SuperForm_Subclass”会分配相同的元素。没有必要使用“parent :: *”来访问元素(如果您使用静态SuperForm变量来存储它们,则只会出现异常 - 这没有任何意义)。

您可以在SuperForm_Subclass中轻松使用$ this-> inputElement和$ this-> submitElement,就像在SuperForm类中一样。

在您的示例中,您可以使用__contruct(),但调用父构造函数的条件相同。您也可以访问那里生成的元素......