我怎样才能阻止Zend窗体错误呈现为无序列表?

问题描述:

目前,我的Zend表上的错误信息呈现这样的元素如下:我怎样才能阻止Zend窗体错误呈现为无序列表?

<ul class="errors"> 
    <li>A password is required.</li> 
</ul> 

我不喜欢这样。我怎样才能让这样的事情,而不是:

<div class="errors"> 
    <p>A password is required.</p> 
</div> 

事情我已经尝试:

  • 拆卸和重新声明错误装饰:

    $password->removeDecorator("Errors"); 
    $password->addDecorator("Errors", array("tag" => "div")); 
    

    隐而不宣”工作;我得到这个:

    <ul tag="div" class="errors"> 
        <li>A password is required.</li> 
    </ul> 
    
  • 缠绕在Errors装饰等装饰HtmlTag。所有这些都是为列表添加样式。例如,我尝试添加<strong></strong>标签,但不是替换列表,而是将标签缠绕它,产生一个大胆的列表。

  • 问真正很好地利用INTERCAL的PLEASE操作:

    PLEASE $password->removeDecorator("Errors"); 
    PLEASE $password->addDecorator("Errors", array("tag" => "div")); 
    

    好吧,那也许是因为我还没有试过。但是,问题是,我想不出别的来试试:)

的第一个问题是,默认Errors decorator希望在其上运行错误的阵列;您可能会在该元素上附加几个验证程序。这就是为什么无序列表对这种情况非常适用。

但是,您希望的输出会为每个元素提供一条消息,因此问题就变成:您希望该消息来自哪里?您是否想要指定单个消息,而不考虑验证程序生成的消息,还是希望从验证程序生成的所有错误消息中提取第一条消息(尽管如此,我认为只会有一个验证程序,这就是你如何知道只有你想要的一条消息)?

无论哪种情况,我都会看到一个自定义装饰器。在每种情况下,render()方法将检查元素上的错误,并在出现错误时,“抓取错误消息”并呈现所需的标记。

在前一种情况下 - 您希望指定单个消息,而不管验证器本身产生的消息 - 您的自定义装饰器可以接受单个选项“消息”。

在后一种情况下,您只需抓住第一条错误消息。与往常一样,在编写自定义装饰器时,您可能会将它们放入您自己的伪名称空间中,然后将该名称空间注册到该元素。

或者,我可能误读了你的意图。也许你愿意拥有多个<p>标签。在这种情况下,你可以使用标准的Errors装饰,但你需要它来调用自定义FormErrors视图助手扩展标准FormErrors视图助手,它覆盖类的保护成员这样:

protected $_htmlElementEnd  = '</p></div>'; 
protected $_htmlElementStart  = '<div%s><p>'; 
protected $_htmlElementSeparator = '</p><p>'; 

与往常一样,你会可能会将您的自定义视图帮助器放入您自己的伪名称空间中,并使用视图对象注册该名称空间。

没有完全写或测试,只是一些想法/想法。希望能帮助到你!