3

メールアドレスを取得するためのフォーム要素があります。要素で使用Zend_Validate_EmailAddressしていますが、あまりユーザーフレンドリーではないエラーメッセージが生成されます。

私の最初のステップは、よりユーザーフレンドリーな新しいメッセージを指定することでしたが、チェックの中には、ユーザーフレンドリーなメッセージに適していないものもあります。isValid()次に、フォームで実行して自分のメッセージを指定した後、これらのメッセージを単純にクリアしようとしましたが、見つかった関数のいずれもメッセージをクリアしません。

私が試したことと結果

  1. setErrorMessages()-ここで設定した値は完全に無視されているようです
  2. clearErrorMessages()-無視されているようです
  3. setErrors()-私のメッセージを追加しますが、他のメッセージはそのまま残します

これは、カスタムビュースクリプトにエラーを表示するコードです。

<?php if ($this->element->hasErrors()): ?>
    <?php echo $this->formErrors($this->element->getMessages()); ?>
<?php endif; ?>

私の解決策

彼の解決策が最も完全であるため、私はゴードンに答えを与えていますが、私は次のようなaddErrorMessage()要素で関数を使用することになりました:

$element->addValidator('EmailAddress', false, $this->_validate['EmailAddress'])
        ->addErrorMessage("'%value%' is not a valid email address");

$element->addValidator('Date', false, array('MM/dd/yyyy'))
        ->addErrorMessage("Date must be in MM/DD/YYYY format");
4

3 に答える 3

5

リファレンスガイドから(強調鉱山):

一部の開発者は、バリデーターにカスタムエラーメッセージを提供したい場合があります。メソッドの$options引数を使用すると、キーをZend_Form_Element::addValidator()提供し'messages'、メッセージテンプレートを設定するためにキーと値のペアの配列にマッピングすることでこれを行うことができます。特定のバリデーターのさまざまな検証エラータイプのエラーコードを知る必要があります

だからあなたはすることができます:

$form = new Zend_Form;
$username = new Zend_Form_Element_Text('username');
$username->addValidator('regex', false, array(
    '/^[a-z]/i',
    'messages' => array(
        'regexInvalid'  => 'foo',
        'regexNotMatch' => 'bar',
        'regexErrorous' => 'baz'
    )
));
$form->addElement($username);
$form->isValid(array('username' => '!foo'));

aZからの文字で始まらないため、正規表現が一致しないため、エラーメッセージの「bar」がレンダリングされます。

これは、次を使用するのと同じです。

$username->setErrorMessages(
    array(
        'regexNotMatch' => 'The value %value% must start with a-Z',
        …
    )
);

パターンで検証済みの値を使用する方法を説明するために、別のパターンを使用しました。

setErrorsデフォルトのテンプレートを削除する場合は、を使用することもできます。

$username->setErrors(array('The value must start with a-Z'));

何をするにしても、で検証する前にそれisValidを構成する必要があります。検証が実行されると、それ以外の場合はデフォルトのエラーメッセージZend_Form_Element が含まれます。私はそれをリセットする方法を知りません(誰かが私を修正したいと思うかもしれませんが)。

リファレンスガイドをさらに引用します。

より良いオプションは、フォームでZend_Translate_Adapterを使用することです。エラーコードは、デフォルトのエラーデコレータによって自動的にアダプタに渡されます。次に、バリデーターのさまざまなエラーコードの変換を設定することにより、独自のエラーメッセージ文字列を指定できます。

すべての検証メッセージは、次のファイルからカスタマイズできます。

ファイルはにあるはずですがAPPLICATION_PATH/resources/languages、どこにあるかを教えてくれれば、実際にはどこにでも置くことができますZend_Translate

于 2011-04-20T20:22:23.483 に答える
1

このようなフォーム要素を定義すると

$titel = new Zend_Form_Element_Text ( "titel" );
$titel->setLabel ( "Titel" )->setRequired ( true )
      ->addValidator ( 'regex', false, array ("/[\pL\pN_\-]+/" ) );

ビュースクリプトでエラーメッセージを指定できます

<?php 
    $form = $this->form;
    $errorsMessages =$this->form->getMessages();
?>

<div>
    <label>Titel</label> <?php echo $form->titel->renderViewHelper()?>
    <?php 
           if(isset($errorsMessages['titel'])){
               echo "<p class='error'>There's something wrong!</p>";
           }
    ?>
</div>

これがあなたのやり方に合っているかどうかはわかりませんが、私は自分のフォームをこのように定義するのが本当に好きです;)

于 2011-04-20T19:10:58.637 に答える
1

これを攻撃する1つの方法は、使用する予定のバリデーターを拡張してメッセージをオーバーライドすることにより、独自のカスタムバリデーターを作成することです。たとえば、Zend_Validate_Alnumを見ると、次のようになります。

class Zend_Validate_Alnum extends Zend_Validate_Abstract
{
    const INVALID      = 'alnumInvalid';
    const NOT_ALNUM    = 'notAlnum';
    const STRING_EMPTY = 'alnumStringEmpty';

    [ ... ]

    protected $_messageTemplates = array(
        self::INVALID      => "Invalid type given. String, integer or float expected",
        self::NOT_ALNUM    => "'%value%' contains characters which are non alphabetic and no digits",
        self::STRING_EMPTY => "'%value%' is an empty string",
    );

    [ ... ]
}

$_messageTemplatesこのように独自のクラスの配列をオーバーライドします

class My_Validate_Alnum extends Zend_Validate_Alnum
{
    protected $_messageTemplates = array(
        self::INVALID      => "My invalid message",
        self::NOT_ALNUM    => "foo",
        self::STRING_EMPTY => "'%value%' is bar",
    );

    [ ... ]
}

次に、Zend_Validate_Alnumを使用する代わりに、My_Validate_Alnumをバリデーターとして使用します。カスタムバリデーターは非常に簡単に作成できます。

于 2011-04-20T19:23:34.733 に答える