首頁 >後端開發 >php教程 >PHP主|設置zend_form_element的自定義錯誤消息

PHP主|設置zend_form_element的自定義錯誤消息

William Shakespeare
William Shakespeare原創
2025-02-25 18:13:08635瀏覽

PHP主|設置zend_form_element的自定義錯誤消息

在本文中,我將展示解決一個常見問題的解決方案,該問題是開發人員必須創建基於Zend Framework的非英語網站或應用程序時出現的。我們如何標記zend_form的字段 哪個是無效的zend_form_element,顯示一條或多個自定義錯誤消息?問題主要是由zend_form_element類的本機反直覺方法引起的,我將在更多詳細信息中解釋。 (請注意,此處討論的問題和解決方案對於Zend Framework版本1.12及以下。)

鑰匙要點

  • >基於Zend Framework創建非英語網站或應用程序時,開發人員經常在標記Zend_form的字段(是Zend_form_element)中遇到的努力,為無效和顯示自定義錯誤消息。這主要是由於zend_form_element類的本機反直覺方法。
  • >由美國公司Zend擁有的Zend Framework的默認行為是為用戶輸入破壞的每個驗證器以英語顯示錯誤消息。開發人員可以轉換框架的每個錯誤消息,也可以在一個或多個消息中解釋輸入無效,並顯示建議以插入可接受的值。後一種選擇不那麼複雜,尤其是對於中小型項目。
  • >解決此問題的解決方案在於形式(init(init()方法)內部的字段和seterRormessages()方法的使用與Zend框架驗證器的屬性,稱為BreakChainonFailure()。此屬性允許驗證過程在第一個失敗條件下停止。這種方法允許該表單在無效輸入時僅顯示自定義消息。

開發一個示例

假設您有一個具有不同字段的表格,並且僅考慮其中一個字段,例如用於讓用戶輸入他的名稱的文本輸入字段。您可以使用的驗證器是不同的,但是為了示例,我們將限制名稱的長度,並且僅允許字母字符和空格。說Zend Framework語言,我們將分別使用Zend_validate_stringlength和zend_validate_alpha類。 您可能已經知道,Zend Framework歸American Company Zend擁有,因此它顯示的所有消息都是英文。框架的默認行為是為用戶輸入破壞的每個驗證器顯示一個或多個錯誤消息。因此,對於那些正在構建非英語網站的人,有兩個選項可以讓所有用戶可讀取消息:翻譯框架的每個錯誤消息,或在一條或多個消息中解釋輸入是無效的,並顯示建議的建議可以插入公認的價值。第一個選擇是過於復雜的,尤其是對於中小型項目,因此我將展示如何使用第二種選項。 為了簡化它,我們將設置一個自定義消息:“輸入是無效的。該值必須只有字母字符和空格,其長度必須在3到50個字符之間。”

代碼

我將展示我們將在文章中使用的代碼。首先,這是包含名稱的輸入字段和檢查數據所需的驗證器的表單。
<span><span><?php
</span></span><span><span>class Application_Form_User extends Zend_Form
</span></span><span><span>{
</span></span><span>    <span>public function init() {
</span></span><span>        <span>// create the field
</span></span><span>        <span>$element = new Zend_Form_Element_Text("name");
</span></span><span>        <span>$element->setLabel("Name");
</span></span><span>
</span><span>        <span>// set the validators
</span></span><span>        <span>$element->setValidators(array(
</span></span><span>            <span>new Zend_Validate_Alpha(true),
</span></span><span>            <span>new Zend_Validate_StringLength(
</span></span><span>                <span>array("min" => 3, "max" => 50))
</span></span><span>        <span>));
</span></span><span>        <span>$element->setRequired();
</span></span><span>
</span><span>        <span>// add the element to the form
</span></span><span>        <span>$this->addElement($element);
</span></span><span>
</span><span>        <span>// add a submit button
</span></span><span>        <span>$element = new Zend_Form_Element_Submit("submit");
</span></span><span>        <span>$element->setLabel("Submit");
</span></span><span>        <span>$this->addElement($element);
</span></span><span>    <span>}
</span></span><span><span>}</span></span>
在控制器中,我們將檢查該字段是否有效並採取相應行動。通常,您不會使用indexController,並且可能會在特定控制器中使用此驗證。無論如何,為了簡化示例,我將使用它。
<span><span><?php
</span></span><span><span>class IndexController extends Zend_Controller_Action
</span></span><span><span>{
</span></span><span>    <span>public function init() {
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>public function indexAction() {
</span></span><span>        <span>$form = new Application_Form_User();
</span></span><span>
</span><span>        <span>if ($this->getRequest()->isPost() &&
</span></span><span>            <span>$form->isValid($this->getRequest()->getPost())) {
</span></span><span>            <span>$this->view->message = "Valid input";
</span></span><span>        <span>}
</span></span><span>        <span>else {
</span></span><span>            <span>$this->view->form = $form;
</span></span><span>        <span>}
</span></span><span>    <span>}
</span></span><span><span>}</span></span>
所使用的視圖非常簡單;它僅顯示消息和表單。
<span><span><?php
</span></span><span><span>if (isset($this->message)) {
</span></span><span>    <span>echo $this->message;
</span></span><span><span>}
</span></span><span><span>if (isset($this->form)) {
</span></span><span>    <span>echo $this->form;
</span></span><span><span>}</span></span>
上面的源代碼,沒有任何CSS規則,將其呈現:

PHP主|設置zend_form_element的自定義錯誤消息

此外,如果您在名稱字段中插入無效的值“ 88”,您將看到消息:

PHP主|設置zend_form_element的自定義錯誤消息

分析框架的方法

一個很好的問題是,是否已經可以面對這種情況了。答案是幾乎 。我的意思是有一些方法,但它們並不總是按照您的期望(至少如我所期望的)工作。管理錯誤消息的方法是:
  • > setErrors(數組$消息)
  • > seterRormessages(數組$消息)
方法setErrors()只有一個參數,它是一個數組,並將其元素用作無效輸入時顯示的消息。其使用的一個例子是:
<span><span><?php
</span></span><span><span>class Application_Form_User extends Zend_Form
</span></span><span><span>{
</span></span><span>    <span>public function init() {
</span></span><span>        <span>// create the field
</span></span><span>        <span>$element = new Zend_Form_Element_Text("name");
</span></span><span>        <span>$element->setLabel("Name");
</span></span><span>
</span><span>        <span>// set the validators
</span></span><span>        <span>$element->setValidators(array(
</span></span><span>            <span>new Zend_Validate_Alpha(true),
</span></span><span>            <span>new Zend_Validate_StringLength(
</span></span><span>                <span>array("min" => 3, "max" => 50))
</span></span><span>        <span>));
</span></span><span>        <span>$element->setRequired();
</span></span><span>
</span><span>        <span>// add the element to the form
</span></span><span>        <span>$this->addElement($element);
</span></span><span>
</span><span>        <span>// add a submit button
</span></span><span>        <span>$element = new Zend_Form_Element_Submit("submit");
</span></span><span>        <span>$element->setLabel("Submit");
</span></span><span>        <span>$this->addElement($element);
</span></span><span>    <span>}
</span></span><span><span>}</span></span>
此方法以及顯示給定的字符串也將字段標記為無效。 它可以在應用程序邏輯中兩次使用,但是在兩者中,它具有對我們的目標無用的行為。第一個是在創建表單元素(init(init()方法)期間。在這種情況下,在加載表單後以及用戶插入任何數據之前顯示消息。非常不愉快。在這種情況下,代碼的相關部分類似:
<span><span><?php
</span></span><span><span>class IndexController extends Zend_Controller_Action
</span></span><span><span>{
</span></span><span>    <span>public function init() {
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>public function indexAction() {
</span></span><span>        <span>$form = new Application_Form_User();
</span></span><span>
</span><span>        <span>if ($this->getRequest()->isPost() &&
</span></span><span>            <span>$form->isValid($this->getRequest()->getPost())) {
</span></span><span>            <span>$this->view->message = "Valid input";
</span></span><span>        <span>}
</span></span><span>        <span>else {
</span></span><span>            <span>$this->view->form = $form;
</span></span><span>        <span>}
</span></span><span>    <span>}
</span></span><span><span>}</span></span>
在控制器內的常用數據驗證期間發送信息後,第二次發生。發生的事情是,當發生錯誤時,自定義消息將附加到默認消息上。在這種情況下,索引控制器的索引()以這種方式更改:
<span><span><?php
</span></span><span><span>if (isset($this->message)) {
</span></span><span>    <span>echo $this->message;
</span></span><span><span>}
</span></span><span><span>if (isset($this->form)) {
</span></span><span>    <span>echo $this->form;
</span></span><span><span>}</span></span>
就像seterrors()一樣,seterRormessages()方法作為參數作為一個字符串數組,如果輸入無效,將顯示給用戶。其使用的一個例子是:
<span><span><?php
</span></span><span><span>// set the custom message in the case of an error
</span></span><span><span>$element->setErrors(array("The input is invalid. The value must have only alphabetic characters and spaces and its length must be between 3 and 50 characters."));</span></span>
這條代碼行仍然無法解決問題Beucase,它將顯示每個不滿意的條件都會顯示相同的錯誤消息,或者將沒有效果。如果在init()方法中使用所示的行,以setErrors()顯示的方式相同的方式,則在錯誤的情況下,將顯示自定義消息的數量與用戶輸入違反的條件數量一樣多。如果在控制器內的通常數據驗證期間插入該行,則以前面的解釋方式,將沒有效果。這意味著不會顯示自定義消息,並且框架將僅顯示默認消息。

發現解決方案

現在,關鍵是要理解>> 為了插入自定義消息,以便用戶可以進行比較和有關接受哪些值的建議。毫無疑問,何時發生在表單內(init(init()方法)內部的字段以及如何歸結為seterRormessages()方法的結合以及使用Zend Framework的屬性,稱為BreakChainonFailure() 。後者允許我們在第一個失敗條件下停止驗證過程。如果我們設置了五個驗證器,但第一個驗證器失敗,則不會使用其他四個。 要利用此屬性利用最少數量的代碼行,我將在開始時說明的代碼。我將添加到INIT()方法中使用SeterRormess()方法的代碼行,並利用SetValidators()接受的可能的輸入配置之一,該配置期望有一系列數組。主一個中包含的數組最多可以具有三個參數,其中包括:
  1. >字符串(強制性)以將驗證器指定為用戶。
  2. >布爾值(默認情況下,其值為false),以指定框架是否必須在第一個失敗時打破驗證。因此,此參數設置了屬性breakchainonfailure的價值,這將幫助我們實現目標。
  3. 每個選擇的驗證器
  4. >的選項數組(默認情況下,默認為空數組)都不同
  5. 使用要使用的每個驗證器所使用的第二個參數是必不可少的。 根據我們到目前為止所看到的,由此產生的代碼是:
<span><span><?php
</span></span><span><span>class Application_Form_User extends Zend_Form
</span></span><span><span>{
</span></span><span>    <span>public function init() {
</span></span><span>        <span>// create the field
</span></span><span>        <span>$element = new Zend_Form_Element_Text("name");
</span></span><span>        <span>$element->setLabel("Name");
</span></span><span>
</span><span>        <span>// set the validators
</span></span><span>        <span>$element->setValidators(array(
</span></span><span>            <span>new Zend_Validate_Alpha(true),
</span></span><span>            <span>new Zend_Validate_StringLength(
</span></span><span>                <span>array("min" => 3, "max" => 50))
</span></span><span>        <span>));
</span></span><span>        <span>$element->setRequired();
</span></span><span>
</span><span>        <span>// add the element to the form
</span></span><span>        <span>$this->addElement($element);
</span></span><span>
</span><span>        <span>// add a submit button
</span></span><span>        <span>$element = new Zend_Form_Element_Submit("submit");
</span></span><span>        <span>$element->setLabel("Submit");
</span></span><span>        <span>$this->addElement($element);
</span></span><span>    <span>}
</span></span><span><span>}</span></span>
結論

使用上面的代碼,該表格僅在無效輸入時僅顯示自定義消息……正是我們想要的!如果您需要使用更多消息,例如在幾個階段的建議中,只需在用於SeterRormessages()方法的數組中添加更多字符串即可。 通過fotolia

圖像 在設置Zend表單元素的自定義錯誤消息時,經常詢問的問題(常見問題解答) >如何在zend中自定義特定表單元素的錯誤消息?

>自定義Zend中特定表單元素的錯誤消息非常簡單。您可以使用setMessage()方法為特定驗證器設置自定義錯誤消息。例如,如果您有一個名為“電子郵件”的表單元素,並且要為其設置自定義錯誤消息,則可以按以下方式進行:

$ email = new zend_form_element_text('email'') ; $ email--> setLabel('電子郵件地址')

- > addValidator('nocempty',true)
> - > addValidator('emailAddress');
$ email- -> getValidator('nocementy') - > setMessage('請輸入您的電子郵件地址');
在本示例中,setMessage()方法用於為“電子郵件”表單元素的“ notempty”驗證器設置自定義錯誤消息。 zend?

>如果要在zend中為form元素設置多個自定義錯誤消息,則可以使用setMessages()方法。此方法接受錯誤消息數組。這是一個示例:

$ email = new zend_form_element_text('email');

$ email--> setlabel('email emeldlobel('email dorkation')

- > - > addvalidator( 'notempty',true)

- > addValidator('emailAddress');

$ email--> getValidator('notempty') - > setMessages(array(
zend_end_validate_notempty) :無效=>'請輸入有效的電子郵件地址'
));
在此示例中,setMessages()方法用於為“電子郵件”表單元素的“無empppy”驗證器設置多個自定義錯誤消息。

>當表單在zend中失敗驗證時如何顯示自定義錯誤消息?

>當表單在zend中失敗驗證時,您可以使用adderror()方法顯示自定義錯誤消息。此方法添加了一個錯誤消息,當表單失敗驗證時將顯示。以下是一個示例:

$ form = new zend_form();
$ form-> addElement('text','email',array(
>'valiverators'=> array('notempty','options'=> array('message'=>'需要電子郵件')),
array('valiverator'=>> 'emailAddress','options '=> array('消息'=>'無效的電子郵件地址')

));
> if(!$ form- form-> isvalid($ _ post)){
$ form-> adderror('提交中有錯誤。請更正它們,然後重試。'); }
在此示例中, adderror ()方法用於添加一個自定義錯誤消息,該消息將在表單失敗驗證時將顯示。
>
>我如何更改zend中的默認錯誤消息?

>您可以更改默認值通過使用setMessage()方法,在zend中的錯誤消息。此方法允許您為特定驗證器設置自定義錯誤消息。這是一個示例:

$ email = new zend_form_element_text('email');

$ email--> setlabel('email emeldlobel('email dorkation')
- > - > addvalidator( 'notempty',true)
- > addValidator('emailAddress');
$ email--> getValidator('notempty') - > setMessage('請輸入您的電子郵件地址');
> $ emagevalidator('emailAddress'') - > setMessage('請輸入有效的電子郵件地址');在本示例中,setMessage()方法用於更改默認錯誤消息的“ notempty”和“ emailAddress”'電子郵件'表單元素的驗證器。

如何為zend element中需要的表單元素設置自定義錯誤消息?在Zend中需要,您可以使用SetRequired()和AdderRormessage()方法為其設置自定義錯誤消息。這是一個示例:

$ email = new zend_form_element_text('email');

$ email--> setLabel('email emeldlis'>> setRequired(true)

> adderRormessage ('需要電子郵件');在本示例中,setRequired()方法用於使'電子郵件'表單元素需要,並且AdderRormessage()方法用於為其設置自定義錯誤消息。

>

以上是PHP主|設置zend_form_element的自定義錯誤消息的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn