検索
ホームページバックエンド開発PHPチュートリアルPHPマスター| zend_form_elementのカスタムエラーメッセージの設定

PHPマスター| zend_form_elementのカスタムエラーメッセージの設定

この記事では、開発者がZend Frameworkに基づいた非英語のWebサイトまたはアプリケーションを作成する必要があるときに発生する一般的な問題の解決策を示します。 Zend_formのフィールドをどのようにマークしますか 無効なZend_form_elementは、1つ以上のカスタムエラーメッセージを表示しますか?この問題は、主にZend_form_Elementクラスのネイティブなカウンターインティックメソッドによって引き起こされます。これについては、詳細について説明します。 (ここで説明する問題と解決策は、Zend Frameworkバージョン1.12以下で有効です。)

キーテイクアウト

  • Zendフレームワークに基づいて英語以外のWebサイトまたはアプリケーションを作成する場合、開発者はしばしばZend_Formのフィールド(Zend_form_Element)のフィールドを無効で表示し、カスタムエラーメッセージを表示することに苦労します。これは主に、Zend_form_Elementクラスのネイティブなカウンター直感に反する方法によるものです。
  • アメリカの会社Zendが所有するZend Frameworkのデフォルト動作は、ユーザー入力によって壊れたすべてのバリッターごとに英語でエラーメッセージを表示することです。開発者は、フレームワークのすべてのエラーメッセージを翻訳するか、入力が無効であることを1つ以上のメッセージで説明し、受け入れられた値を挿入するための提案を表示できます。後者のオプションは、特に中小規模のプロジェクトでは、それほど複雑ではありません。
  • この問題の解決策は、フォーム内のフィールド(init()メソッド)内のフィールドの作成と、breakchainonfailure()と呼ばれるZendフレームワークのバリデーターのプロパティと併せて、setErrormessages()メソッドの使用にあります。このプロパティにより、検証プロセスは最初の故障状態で停止できます。このアプローチにより、フォームは、無効な入力があるときにカスタムメッセージのみを表示できます。

例の開発

異なるフィールドを持つフォームがあり、そのうちの1つだけを考慮に入れているとしましょう。たとえば、ユーザーが自分の名前を入力できるようにするために使用されるテキスト入力フィールドです。使用できるバリデーターは異なりますが、例のために名前の長さを制限し、アルファベットのある文字とスペースのみを許可します。 Zend Framework言語について言えば、それぞれZend_Validate_StringLengthとZend_Validate_Alphaクラスを使用します。 すでにご存知かもしれませんが、Zend FrameworkはAmerican Company Zendが所有しているため、表示されるすべてのメッセージは英語です。フレームワークのデフォルトの動作は、ユーザー入力によって破られたすべてのバリーターに1つ以上のエラーメッセージを表示することです。したがって、英語以外のWebサイトを構築している人のために、すべてのユーザーが読み取り可能なメッセージを持つための2つのオプションがあります。フレームワークのすべてのエラーメッセージを翻訳するか、入力が無効であることを1つ以上のメッセージで説明し、挿入する提案を表示する受け入れられた価値。最初のオプションは、特に中小規模のプロジェクトの場合は過剰に複雑です。そのため、2番目のオプションの使用方法を示します。 簡単に保つために、単一のカスタムメッセージを設定します。「入力は無効です。値にはアルファベットの文字とスペースのみが必要であり、その長さは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></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><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></span>
CSSルールなしの上記のソースコードは、次のようにレンダリングされます。

PHPマスター| zend_form_elementのカスタムエラーメッセージの設定

さらに、名前フィールドに無効な値「88」を挿入すると、メッセージが表示されます。

PHPマスター| zend_form_elementのカスタムエラーメッセージの設定

フレームワークのメソッドの分析

良い質問は、この種の状況に直面する方法がすでに利用できるかどうかです。答えはほぼです 。方法があることを意味しますが、あなたが期待しているように常に機能するとは限りません(少なくとも私が期待するように)。エラーメッセージを管理する方法は次のとおりです。
  • setErrors(配列$メッセージ)
  • setErrormessages(array $ messages)
メソッドSetErrors()には、アレイであるパラメーターが1つだけあり、その要素をメッセージとして使用して、入力が無効な場合に表示されます。その使用の例は次のとおりです。
<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></span>
この方法は、指定された文字列を表示するだけでなく、フィールドを無効とマークします。 アプリケーションロジックで2回使用できますが、両方で目標に役立たない動作があります。 1つ目は、フォーム要素(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>
2回目は、コントローラー内の通常のデータ検証中に情報が送信された後に発生します。何が起こるかは、エラーが発生したときにカスタムメッセージがデフォルトのメッセージに追加されることです。この場合、インデックスコントローラーのindexaction()がこの方法で変更されます。
<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></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></span>
このコード行はまだ問題を解決しませんbeucaseは、満足していない状態ごとに同じエラーメッセージが表示されるか、効果がありません。表示されている行がinit()メソッドで使用されている場合、seterrors()に表示されるのと同じ方法で、エラーの場合、カスタムメッセージはユーザー入力によって違反される条件の数と同じくらい数倍表示されます。コントローラー内の通常のデータ検証中にラインが挿入された場合、前に説明したのと同じように、効果はありません。これは、カスタムメッセージが表示されず、フレームワークにデフォルトのメッセージのみが表示されることを意味します。

ソリューションを明らかにします

さて、ポイントは、のときにを理解することです カスタムメッセージを挿入して、ユーザーが比較し、どの値が受け入れられているかについての提案をすることができます。間違いなく、フォーム内(init()メソッド)内のフィールドの作成にあるとき、およびsetErrormessages()メソッドの結合と、breakchainonfailure()と呼ばれるZendフレームワークのバリッタのプロパティの使用による方法。後者を使用すると、最初の失敗した状態で検証プロセスを停止できます。 5つのバリデーターをセットアップして最初のバリエーターが失敗した場合、他の4つは使用されません。 可能な限り少ないコード行を使用してこのプロパティを使用するために、最初に説明したコードを少し変更します。 setErrormessages()メソッドを使用するコード行をinit()メソッドに追加し、配列を期待するsetvalidators()によって受け入れられた可能な入力構成の1つを利用します。メインの配列に含まれる配列には、最大3つのパラメーターを持つことができます。
    babyatorをユーザーに指定する文字列(必須)
  1. ブール(オプション、デフォルトでは値は偽です)。フレームワークが最初の障害で検証を破らなければならないかどうかを指定します。したがって、このパラメーターは、プロパティBreakChainOnFailureの値を設定します。これは、目標を達成するのに役立つものです。
  2. 選択されたバリデーターごとに異なるオプション(オプション、デフォルトでは空の配列)の配列
  3. 使用したいバリデーターごとにtrueとして渡された2番目のパラメーターを使用することが不可欠です。 これまで見たことによると、結果のコードは次のとおりです。
<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></span>
結論

上記のコードを使用すると、フォームは、無効な入力がある場合にカスタムメッセージのみが表示されます。いくつかの段階での提案など、より多くのメッセージを使用する必要がある場合は、SetErrormessages()メソッドに使用される配列に文字列を追加するだけです。 Fotoliaを介した画像

Zend Form Elementのカスタムエラーメッセージの設定に関するよくある質問(FAQ) Zendの特定のフォーム要素のエラーメッセージをカスタマイズするには、Zendの特定のフォーム要素のエラーメッセージをカスタマイズするのは非常に簡単です。 setMessage()メソッドを使用して、特定のバリーターにカスタムエラーメッセージを設定できます。たとえば、「電子メール」という名前のフォーム要素があり、そのためにカスタムエラーメッセージを設定する場合、次のようにすることができます。 🎜> $ email-> setLabel( '電子メールアドレス')

- > addvalidator( 'notempty'、true)

- > addvalidator( 'emailaddress');

$ email-> getValidator( 'notempty') - > setMessage( 'メールアドレスを入力してください');

この例では、setMessage()メソッドが使用されます「電子メール」フォーム要素の「notempty」バリッターのカスタムエラーメッセージを設定します。 zend?

​​
Zendのフォーム要素の複数のカスタムエラーメッセージを設定する場合は、setMessages()メソッドを使用できます。この方法は、エラーメッセージの配列を受け入れます。例は次のとおりです。

$ email = new zend_form_element_text( 'email');
$ email-> setlabel( 'emailアドレス')
- > addvalidator( 'notempty'、true)
- > addValidator( 'EmailAddress');
$ email-> getValidator( 'notempty') - > setMessages(array(

> zend_validate_notempty :: is_empty => 'あなたのメールアドレスを入力してください'、

zend_validate_emailaddress:: :invalid => '有効な電子メールアドレス'

));

inを入力してくださいこの例、setMessages()メソッドは、「電子メール」フォーム要素の「notempty」バリーターの複数のカスタムエラーメッセージを設定するために使用されます。

フォームがZendで検証に失敗したときにカスタムエラーメッセージを表示するにはどうすればよいですか?

フォームがZendで検証に失敗した場合、Adderror()メソッドを使用してカスタムエラーメッセージを表示できます。このメソッドは、フォームが検証に失敗したときに表示されるエラーメッセージを追加します。例は次のとおりです。

$ form = new zend_form();
$ form-> addelement( 'text'、 'email'、array(
'validators' => array(
>> array) array( 'validator' => 'notempty'、 'options' => array( 'message' => 'emailが必須'))、
array( 'validator' => 'emailAddress'、 'options' => array( 'message' => '無効な電子メールアドレス'))

));
if(!$ form-> isvalid($ _ post)){
$ form-> adderror( '提出にエラーがありました。それらを修正してもう一度やり直してください。');
}
この例では、adderror()メソッドは、フォームが検証に失敗したときに表示されるカスタムエラーメッセージを追加するために使用されます。 setMessage()メソッドを使用してZend。このメソッドを使用すると、特定のバリーターにカスタムエラーメッセージを設定できます。例は次のとおりです。

$ email = new zend_form_element_text( 'email');

$ email-> setlabel( 'emailアドレス')

- > addvalidator( 'notempty'、true)
- > addValidator( 'EmailAddress');
$ email-> getValidator( 'notempty') - > setMessage( 'を入力してくださいあなたのメールアドレス ');
$ email-> getValidator(' EmailAddress ') - > setMessage('有効な電子メールアドレスを入力してください);
この例では、setMessage()メソッドを使用して変更します。 「notempty」および「emailAddress」フォーム要素の「notempty」および「emailAddress」の有効化者のデフォルトエラーメッセージ。 zend?
​​
フォーム要素がZendに必要な場合は、setRequired()およびadderRormessage()メソッドを使用して、カスタムエラーメッセージを設定できます。例は次のとおりです。

$ email = new zend_form_element_text( 'email');

$ email-> setlabel( 'emailアドレス')

- > setRequired(true)

- > adderRormessage ( '電子メールが必須');

この例では、setRequired()メソッドを使用して「電子メール」フォーム要素を必要とし、 adderRormessage()メソッドは、カスタムエラーメッセージを設定するために使用されます。

以上がPHPマスター| zend_form_elementのカスタムエラーメッセージの設定の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
負荷分散がセッション管理にどのように影響し、それに対処するかを説明します。負荷分散がセッション管理にどのように影響し、それに対処するかを説明します。Apr 29, 2025 am 12:42 AM

負荷分散はセッション管理に影響しますが、セッションの複製、セッションの粘着性、集中セッションストレージで解決できます。 1。セッションレプリケーションサーバー間のセッションデータをコピーします。 2。セッションスティンネスは、ユーザーリクエストを同じサーバーに指示します。 3.集中セッションストレージは、Redisなどの独立したサーバーを使用してセッションデータを保存してデータ共有を確保します。

セッションロックの概念を説明します。セッションロックの概念を説明します。Apr 29, 2025 am 12:39 AM

SESSIONLOCKINGISATECHNIQUESTOESUREAUSER'SSESSIONREMAINSEXCLUSIVETOONEUSATIME.ITISCRUCIALFORPREVENTINGDATACORTIONANDSECURITYBREACHESINMULTI-USERAPPLICATIONS.SESSIONLOCKINGISISIMPLEMENTEDUSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGROCKINGSMECHANISMなど

PHPセッションの選択肢はありますか?PHPセッションの選択肢はありますか?Apr 29, 2025 am 12:36 AM

PHPセッションの代替品には、Cookie、トークンベースの認証、データベースベースのセッション、Redis/Memcachedが含まれます。 1.Cookiesは、クライアントにデータを保存することによりセッションを管理します。 2.トークンベースの認証はトークンを使用してユーザーを検証します。これは非常に安全ですが、追加のロジックが必要です。 3.Databaseベースのセッションは、データベースにデータを保存します。これは、スケーラビリティが良好ですが、パフォーマンスに影響を与える可能性があります。 4. Redis/Memcachedは分散キャッシュを使用してパフォーマンスとスケーラビリティを向上させますが、追加のマッチングが必要です

PHPのコンテキストで「セッションハイジャック」という用語を定義します。PHPのコンテキストで「セッションハイジャック」という用語を定義します。Apr 29, 2025 am 12:33 AM

SessionHijackingとは、ユーザーのSessionIDを取得してユーザーになりすましている攻撃者を指します。予防方法には、次のものが含まれます。1)HTTPSを使用した通信の暗号化。 2)SessionIDのソースの検証。 3)安全なSessionID生成アルゴリズムの使用。 4)SessionIDを定期的に更新します。

PHPの完全な形式は何ですか?PHPの完全な形式は何ですか?Apr 28, 2025 pm 04:58 PM

この記事では、PHPについて説明し、その完全なフォーム、Web開発での主要な使用、PythonとJavaとの比較、および初心者の学習のしやすさについて説明します。

PHPはフォームデータをどのように処理しますか?PHPはフォームデータをどのように処理しますか?Apr 28, 2025 pm 04:57 PM

PHPは、$ \ _ postおよび$ \ _を使用してフォームデータを処理し、検証、消毒、安全なデータベースインタラクションを通じてセキュリティを確保します。

PHPとASP.NETの違いは何ですか?PHPとASP.NETの違いは何ですか?Apr 28, 2025 pm 04:56 PM

この記事では、PHPとASP.NETを比較して、大規模なWebアプリケーション、パフォーマンスの違い、セキュリティ機能への適合性に焦点を当てています。どちらも大規模なプロジェクトでは実行可能ですが、PHPはオープンソースであり、プラットフォームに依存しませんが、ASP.NET、

PHPはケースに敏感な言語ですか?PHPはケースに敏感な言語ですか?Apr 28, 2025 pm 04:55 PM

PHPの症例感度は変化します:関数は鈍感であり、変数とクラスは感度があります。ベストプラクティスには、一貫した命名と、比較のためにケース非感受性関数を使用することが含まれます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター