我有一个页面上有多个表单。几个表单共享一个具有相同名称(如CustomerID)的元素。这意味着元素ID CustomerID将与其他表单中的相同ID冲突。我想找一个干净的方式来在字段名称前加上表单的名称。例如PaymentProfile_CustomerID。建议?有没有一种方法来作为Zend_Form元素名称的前缀?
到目前为止,我已经能够拿出最好的是:下面
class MyForm extends Zend_Form
{
public function init()
{
$this->setName("PaymentProfile");
...
$this->_prefixElementNames();
}
private function _prefixElementNames()
{
$elements = $this->getElements();
$formName = $this->getName();
foreach($elements as $e) {
$e->setAttrib('id', $formName . '_' . $e->getName());
}
}
}
UPDATE @加维的回答有一个简单的修改工作良好。
public function addElement($element, $name = null, $options = null)
{
$e = parent::addElement($element, $name, $options);
if($this->getName())
// I use setAttrib instead of setName because I only want the ID to be changed.
// Didn't want the form data to be prefixed, just the unique HTML identifier.
$element->setAttrib('id', $this->getName() . '_' . $element->getName());
return $e;
}
我会看看,看看有什么。谢谢! – David 2012-03-21 16:40:25
这似乎是我尝试完成的最正确的方法。谢谢你。 – David 2012-03-21 16:46:52
对不起,以前这样简短的答案,但我没有太多时间,但我可以看到它已经足够了:]。我扩大了我的答案,以备将来参考。 – vandalizmo 2012-03-21 19:51:57