我在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;
}
}
如何让普通的表单元素代替使用它?
为什么我要这个?
假设我在页面上多次使用相同的表单,formelements的'id =' - 标签将多次出现,这不是w3c-valid。所以最初我想在id前加上表单的id。
任何更好的想法或方法都可以做到这一点。
更新:刚刚意识到这与装饰者有同样的问题:(不要认为这是我采取的正确道路。
答案 0 :(得分: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()) ...
答案 1 :(得分:0)
如果用作子表单,则可以验证在页面上使用相同表单的多个实例。
SubForms为所有id添加前缀,其中包含子表单的名称/标识符。