从转义HTML中阻止Zend表单元素错误

时间:2013-07-15 18:22:26

标签: php zend-framework zend-form

我有一个Zend文本元素,标签中包含HTML。我可以通过添加->setOption('escape', false);选项来阻止Zend在那里转义HTML。这可以按预期工作。

但是,当出现错误时,错误会将标签HTML转义为错误消息的标题。我得到的东西看起来像这样:

<strong>First</strong> name
Please enter your first name

我正在考虑几种可以解决这个问题的方法,但不确定是否有可能。我可以更改错误的格式,以便它不直接使用输入标签吗?或者有没有办法阻止Zend在错误中转义HTML?

编辑:我没有在输入旁边显示每个输入错误。相反,我正在将所有错误分组并立即显示它们。每个元素都删除了错误修饰符:

$firstName->removeDecorator('Errors');

然后我通过添加FormErrors装饰器将其显示为一组:

$myForm->setDecorators(array('FormErrors', ....));

我认为这是导致输入标签显示为错误列表的一部分的原因。

1 个答案:

答案 0 :(得分:0)

如果您使用的是FormErrors装饰器,那么您有两种方法可以停止转义标签:

第一个选项: 使用Zend_View::setEscape方法指定另一个Zend_View转义回调 第二种选择: 创建自定义FormErrors装饰器并覆盖renderLabel方法。

示例:

class My_Form_Decorator_FormErrors extends Zend_Form_Decorator_FormErrors
{
    public function renderLabel(Zend_Form_Element $element, Zend_View_Interface $view)
    {
        return $this->getMarkupElementLabelStart()
             . $element->getLabel()
             . $this->getMarkupElementLabelEnd();
    }    
}

class Forms_Example extends Zend_Form
{
    public function init()
    {
        /* ... */
        $this->addPrefixPath('My_Form_Decorator', 'My/Form/Decorator', 'decorator');
        /* ... */   
    }
}