如何更改Zend_View_Helpers_FormErrors使用的标记?

时间:2011-01-31 16:50:04

标签: zend-framework zend-form

使用Zend_Form时,如果元素无效,表单将通过无序列表返回错误。如何将其更改为使用段落标记?

我试图为元素加载Errors装饰器并调用setOptions()来传递一堆标签来替换Zend_Form_Decorator_FormErrors使用的ul / li东西,但这不起作用= /而不是Zend_Form_Decorator_Errors只是放了选项作为ul标记中的属性/值对。

2 个答案:

答案 0 :(得分:2)

我没有扩展Errors装饰器,而是扩展了formErrors视图助手,让它接受并处理数组中的选项。 formErrors视图助手具有setter,可以让我更改正在使用的标记:

class My_View_Helper_FormErrors extends Zend_View_Helper_FormErrors
{
    public function formErrors($errors, array $options = null)
    {
      if(key_exists('htmlElementStart', $options))
      {
        $this->setElementStart($options['htmlElementStart']);
        unset($options['htmlElementStart']);
      }
      if(key_exists('htmlElementEnd', $options))
      {
        $this->setElementEnd($options['htmlElementEnd']);
        unset($options['htmlElementEnd']);
      }
      if(key_exists('htmlElementSeparator', $options))
      {
        $this->setElementSeparator($options['htmlElementSeparator']);
        unset($options['htmlElementSeparator']);
      }
      return parent::formErrors($errors, $options);
    }
}

为了传递选项,我得到了错误装饰器和setOptions():

$element->getDecorator()->setOptions(
  array(
    'class' => 'error',
    'htmlElementStart' => '<p%s>',
    'htmlElementEnd' => '</p>',
    'htmlElementSeparator' => '<br/>'
  )
);

告诉元素加载辅助路径:

$element->getView()->addHelperPath('My/View/Helper', 'My_View_Helper');

答案 1 :(得分:1)

不幸的是,你不能通过传递一堆选项来改变输出格式。 如果你想改变这种行为,你别无选择,只能编写自己的错误装饰器(很可能是原始错误装饰器的衍生物)。这个新的装饰器必须覆盖它的render ()方法才能调用你自己的视图助手(而不是ZF默认使用的formErrors助手)。