【问题标题】:zend_form access parent form elementzend_form 访问父表单元素
【发布时间】:2010-01-12 02:22:37
【问题描述】:

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

起初,在我的表单构造函数中,我调用了

parent::__construct($options = null);

然后像这样访问父元素

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

问题是所有父表单元素都会显示,无论是否显式调用。有人说,“不要用__construct(),用init()函数。所以我把构造函数改成init(),把父构造函数注释掉,然后跑表单,就炸了说不能通过setName() 的值为空。我注释掉了所有 seName() 调用并且表单运行,但只显示了在子类表单中实例化的元素。

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

已解决:由于构造函数切换为init,所以对parent的调用也需要切换。对于有php背景的人来说很容易。对于不这样做的人来说,情况并非如此。

使用

parent::init();

【问题讨论】:

  • 嗨,迈克尔,欢迎来到 Stack Overflow!您可以做一些事情来帮助其他用户看到您的解决方案并为正确的答案加分。如果发布的答案之一是正确的,您可以选择该答案作为正确答案。如果没有,您可以发布自己的解决方案作为答案,然后选择正确的答案。这样,其他人会看到您的问题已得到解答;没有必要在问题标题中加上“已解决”。希望这可以帮助;回头见!
  • 谢谢,韦斯。我不太确定如何解决这个问题。同时,我希望尽快提供解决方案,以防其他人需要它。

标签: zend-framework inheritance zend-form subclass


【解决方案1】:

已解决:由于构造函数切换为init,所以对parent的调用也需要切换。对于有php背景的人来说很容易。对于不这样做的人来说,情况并非如此。

使用

父::init();

【讨论】:

    【解决方案2】:

    您应该首先学习 OOP 原则。显然你对它没有任何了解。您需要在您编写的 Form_Class::init() 方法中调用 parent::init() ,但是为什么呢?因为否则父方法不会被调用并被 From_Class 方法覆盖。

    另一件事是,当您有一个带有输入和提交的父类“SuperForm”时,您的“SuperForm_Subclass”将分配相同的元素。无需使用“parent::*”来访问元素(唯一的例外是您使用静态 SuperForm 变量来存储它们 - 这没有任何意义)。

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

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

    【讨论】:

    • 你应该学会一些礼貌和同理心,因为显然你对这些术语一无所知。你提出的解决方案完全被你的傲慢所掩盖。并不是每个人都在接受过正规培训后才进入编程领域。我来这个论坛寻求解决方案。如果你只想诋毁那些比你了解的人,那就闭嘴吧。
    • 当框架出现时,许多用户倾向于认为他们可以在不了解任何原理的情况下用 PHP 做事。我对这个事实不满意。我花了很多时间帮助其他人解决他们的编程问题。我热衷于帮助任何人。但是当有人以一种显而易见的方式提出问题时,我倾向于反应过度,他没有一般知识并试图做一些“大事”。我不认为我的反应有任何粗鲁。对不起,如果你应该先学习基础知识伤害了你的感觉。比,请把我的回答当作一个没有仇恨的好建议。
    • 五年后看到这个,我不得不说我为自己的反应感到羞耻。对不起。
    猜你喜欢
    • 1970-01-01
    • 2021-09-05
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    相关资源
    最近更新 更多