如何通过Zend_Form_Element子项获取Zend_Form对象

时间:2014-01-26 02:44:37

标签: zend-framework zend-form zend-form-element

我已经构建了一个Zend_Form_Decorator_Input类,它扩展了Zend_Form_Decorator_Abstract,这样我就可以自定义表单输入 - 效果很好。我在decorate类中遇到了一个问题,试图获取元素的表单名称,以便为每个字段构建一个唯一的id(如果有多个表单具有相同的字段名称)。

没有这样的方法:Zend_Form_Element :: getForm();似乎Zend_Form_Decorator_Abstract也没有这种能力。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我不认为从装饰器中更改id是正确的方法。在调用decorator时,元素已经被渲染。因此,更改id对源代码没有任何影响。另外,正如您已经指出的那样,表单及其元素之间的关系是单向的,即(据我所知),没有直接的方法从元素访问表单。

到目前为止坏消息。

好消息是,对您的问题实际上有一个非常简单的解决方案:Zend_Form选项elementsBelongTo。它可以防止将相同的ID分配给两个具有相同名称但属于不同形式的表单元素:

    $form1 = new Zend_Form(array('elementsBelongTo' => 'form1'));
    $form1->addElement('Text', 'text1');

    $form2 = new Zend_Form(array('elementsBelongTo' => 'form2'));
    $form2->addElement('Text', 'text1');

虽然两个表单都有一个名为“text1”的文本字段,但它们有不同的ID:'form1-text1'和'form2-text1'。但是,这有一个主要缺点:这也改变了名称元素,使其格式为formname[elementname]。因此$this->getRequest()->getParam('formname')将返回包含表单元素的关联数组。