0

我在 My/View/Helper/FormElement.php 创建了这个文件

<?php

abstract class My_View_Helper_FormElement extends Zend_View_Helper_FormElement
{

    protected function _getInfo($name, $value = null, $attribs = null,
        $options = null, $listsep = null
    ) {

        $info = parent::_getInfo($name, $value, $attribs, $options, $listsep);

        $info['id'] = 'My new ID';

        return $info;
    }
}

我怎样才能让正常的表单元素来使用它呢?

我为什么要这个?

假设我在一个页面上多次使用相同的表单,表单元素的 'id='-tag 会出现多次,这不是 w3c-valid。所以最初我想在 id 前面加上表单的 id。

非常感谢任何更好的想法或方法。

更新:刚刚意识到装饰器也存在同样的问题 :( 不要认为这是我所走的正确道路。

4

2 回答 2

1

创建扩展 Zend_Form 的新表单类,并在 init() 方法中使用变量 $ns 为所有元素添加前缀/后缀。您可以通过表单构造函数设置 $ns 变量。

class Form_Test extends Zend_Form
{

protected $ns;

public function init()
{
    $this->setAttrib('id', $this->ns . 'testForm');

    $name = new Zend_Form_Element_Text('name');
    $name->setAttrib('id', $this->ns . 'name');
    $name->setLabel('Name: *')->setRequired(true);


    $submit = new Zend_Form_Element_Submit('submit');
    $submit->setAttrib('id', $this->ns . 'submitbutton');
    $submit->setLabel('Add')->setIgnore(true);

    $this->addElements(array($name, $submit));
}

public function setNs($data)
{
    $this->ns = $data;
}

}

在控制器或您调用此表单的任何地方指定每个表单实例:

$form1 = new Form_Test(array('ns' => 'prefix1'));
$this->view->form1 = $form1;

$form2 = new Form_Test(array('ns' => 'prefix2'));
$this->view->form2 = $form2;

// Validation if calling from the controller
if ($form1->isValid()) ...
于 2010-06-28T21:51:20.180 回答
0

如果用作子表单,则可以验证在页面上使用相同表单的多个实例。

SubForms 以子表单的名称/标识符作为所有 id 的前缀。

于 2010-06-30T20:02:24.143 回答