2011-04-21 57 views
4

目前,我的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")); 
    

    好吧,那也許是因爲我還沒有試過。但是,問題是,我想不出別的來試試:)

回答

9

的第一個問題是,默認Errors decorator希望在其上運行錯誤的陣列;您可能會在該元素上附加幾個驗證程序。這就是爲什麼無序列表對這種情況非常適用。

但是,您希望的輸出會爲每個元素提供一條消息,因此問題就變成:您希望該消息來自哪裏?您是否想要指定單個消息,而不考慮驗證程序生成的消息,還是希望從驗證程序生成的所有錯誤消息中提取第一條消息(儘管如此,我認爲只會有一個驗證程序,這就是你如何知道只有你想要的一條消息)?

無論哪種情況,我都會看到一個自定義裝飾器。在每種情況下,render()方法將檢查元素上的錯誤,並在出現錯誤時,「抓取錯誤消息」並呈現所需的標記。

在前一種情況下 - 您希望指定單個消息,而不管驗證器本身產生的消息 - 您的自定義裝飾器可以接受單個選項「消息」。

在後一種情況下,您只需抓住第一條錯誤消息。與往常一樣,在編寫自定義裝飾器時,您可能會將它們放入您自己的僞名稱空間中,然後將該名稱空間註冊到該元素。

或者,我可能誤讀了你的意圖。也許你願意擁有多個<p>標籤。在這種情況下,你可以使用標準的Errors裝飾,但你需要它來調用自定義FormErrors視圖助手擴展標準FormErrors視圖助手,它覆蓋類的保護成員這樣:

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

與往常一樣,你會可能會將您的自定義視圖幫助器放入您自己的僞名稱空間中,並使用視圖對象註冊該名稱空間。

沒有完全寫或測試,只是一些想法/想法。希望能幫助到你!

相關問題