【问题标题】:Stop Zend Form element errors from escaping HTML阻止 Zend Form 元素错误转义 HTML
【发布时间】:2013-07-15 18:22:26
【问题描述】:

我有一个 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', ....));

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

【问题讨论】:

  • 产生错误信息的原因是什么?至少在 ZF1 中,默认的错误消息装饰器不包含标签作为错误的标题。
  • @Divey 谢谢 Divey,我已经将我的问题更新为我应该首先写的内容​​。我正在使用 FormErrors 表单装饰器对错误进行分组,所以我认为这就是将标签显示为标题的原因?

标签: php zend-framework zend-form


【解决方案1】:

如果您使用的是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');
        /* ... */   
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多