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

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

William Shakespeare
リリース: 2025-02-25 18:13:08
オリジナル
633 人が閲覧しました

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>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
コントローラーでは、フィールドが有効かどうかを確認し、それに応じて動作します。通常、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(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>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
この方法は、指定された文字列を表示するだけでなく、フィールドを無効とマークします。 アプリケーションロジックで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>
ログイン後にコピー
ログイン後にコピー
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>
ログイン後にコピー
ログイン後にコピー
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()メソッド)内のフィールドの作成にあるとき、および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>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
結論

上記のコードを使用すると、フォームは、無効な入力がある場合にカスタムメッセージのみが表示されます。いくつかの段階での提案など、より多くのメッセージを使用する必要がある場合は、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 までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート