【问题标题】:Having difficulties extending Zend_Form扩展 Zend_Form 有困难
【发布时间】:2012-04-03 13:42:23
【问题描述】:

目前我在扩展 Zend_Form 时遇到了很大的困难。

我有一个名为 Forms_LpaManageEmailForm 的基本类。 它单独使用并且工作正常。 接下来我创建了一个新的班级表格 Default_Form_CartReport 女巫扩展了 Forms_LpaManageEmailForm。 所以任务是渲染 Default_Form_CartReport 并稍微修改它。 换句话说,我需要所有功能 Forms_LpaManageEmailForm 类,但重写了 _addMultiOptionsForMultiSelect() 函数 (做了什么)并更改了按钮标签(未解决)。

在基本类中,我有一个名为 id 的隐藏元素,它的值被填充 $this->_entry_id['entry_id']. 当我单独使用基本形式时 - 它的炒锅很好。但 当我运行扩展表单(Forms_LpaManageEmailForm)时,我看到隐藏的 id 元素的值为空。在构造部分的基本类中,我运行 Zend 调试器(用这一行Zend_Debug::dump($this->_entry_id['entry_id']))查看是否 值被传递。它通过了 :) 当我在 init() 部分重复此操作时,它显示为 NULL...

我几乎不明白 - 问题在于 init() 函数,它的调用方式。 我认为 Default_Form_CartReport 类框架有问题。

我已将代码上传到:PASTEBIN 在这个问题上真的需要帮助。

谢谢!

【问题讨论】:

    标签: zend-framework inheritance zend-form subclass


    【解决方案1】:

    我相信您的问题导致我Forms_LpaManageEmailForm:: __construct 直接调用$this->init()。如果你打开Zend_Form,你会注意到__construct也在调用$this->init()函数。这会导致您的 init() 函数执行两次。

    尝试仅在__construct 函数中加载所有逻辑和元素,不要使用init() 函数。此外,每个表单类中的__construct 函数应始终在任何其他逻辑之前调用parent::__construct

    【讨论】:

    • aporat,非常感谢您的回答!我已经更新了我的代码,现在它在这里:LINK。现在,当我运行 Zend_Debug::dump($this->getElements()) 时,它会写入 id 元素具有 ["_value":protected] => int(51) 值。但它仍然不是以 HTML 格式输出...现在我可以更改标签 :) 我认为我们正朝着最终解决方案的正确方向前进
    • 另外我添加了来自Zend_Debug::dump($this->getElements())的数据
    • 顺便说一句:如果我从父类中删除 id 元素 - 根本不会呈现子表单。但我可以看到表单转储......非常奇怪的行为
    • 终于搞定了。最后一个问题出在控制器 isValid 方法中......目前正在修复它:)
    • 没问题:-)。顺便说一句,addElement() 函数返回元素本身,所以你可以这样写: $submit = new Zend_Form_Element_Submit('submit'); $submit->setLabel('Submit');$this->addElement($submit);
    猜你喜欢
    • 1970-01-01
    • 2020-01-26
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 2012-03-06
    • 2019-01-30
    • 2013-03-14
    相关资源
    最近更新 更多