0

ZF 1.11.2
ほとんどの構文を試しました。彼らはクリックしませんでした。

$validators = array('product_name' => array('alnum'));
//...
$input = new Zend_Filter_Input($filters, $validators, $_POST);

alnum上記の構文でカスタム エラー メッセージを設定するにはどうすればよいでしょうか。を使用してい'messages' => array('Not alnum!!')ますか?うん、まあ…どうやって?100 個のネストされた配列を試したに違いありません。

4

4 に答える 4

2

組み込みのトランスレータを使用します。

たとえば、単純な配列を使用するように構成ファイルでトランスレーターを構成します。

; Translations
resources.translate.data = APPLICATION_PATH "/lang"
resources.translate.adapter = "Array"
resources.translate.options.scan = "directory"
resources.translate.options.disableNotices = "1"

これにより、Translate アプリケーション リソース プラグインに、必要なことが伝えられます。

  • あなたの翻訳を下に置いてくださいAPPLICATION_PATH/lang
  • Array アダプターを使用する (最も単純な)
  • 言語/ロケールの翻訳ディレクトリをスキャンします
  • 不明な翻訳に関するエラーを無視します (つまり、ユーザーは en_AU を好みますが、その言語の特定の翻訳ファイルを持っていません)。

次に、サポートする言語のフォルダーを作成します。少なくとも、必要になりますapplication/lang/en。例えば

application
    lang
        en
        en_AU
        en_US

各言語フォルダーにtranslate.phpファイルを作成します。このファイルには、各翻訳のキーと値のペアの配列が含まれます (そして返されます)。各バリデータ メッセージのキーは、バリデータ クラスで見つけることができます。Alnum バリデーターの例を次に示します。

<?php
// application/lang/en/translate.php

return array(
    Zend_Validate_Alnum::NOT_ALNUM => 'Not alnum!!',
    Zend_Validate_Alnum::INVALID   => 'Not valid!!'
);

すべての Zend バリデーターについて%value%、メッセージでプレースホルダーを使用することもできます。

Zend_Validate_Alnum::NOT_ALNUM => "'%value%' is not alpha-numeric"
于 2011-02-02T23:09:39.820 に答える
2

要素のトランスレータを無効にすると、すべてのバリデータ メッセージの翻訳が無効になります。フォームまたは要素でトランスレータを使用して、バリデータ メッセージを 1 つだけ上書きすることはできません。要素が検証されると、トランスレーターがすべてのバリデーターに注入されます。バリデーターは、設定されている場合、トランスレーターを使用します。これにより、カスタム エラー メッセージは使用されません。

Zend_Validate_Abstract::_createMessage()

// $message is your custom error message
$message = $this->_messageTemplates[$messageKey];

if (null !== ($translator = $this->getTranslator())) {
    // your custom error message gets overwritten because the messageKey can be translated
    if ($translator->isTranslated($messageKey)) {
        $message = $translator->translate($messageKey);
    } else {
        $message = $translator->translate($message);
    }
}

要素のトランスレータを無効にすることによってのみ、カスタム エラー メッセージを使用できると思います。

$element->setDisableTranslator(true)
于 2013-01-23T14:39:35.843 に答える
2

単純にフォーム要素の検証メッセージを変更しようとしている場合、私はいつも次のようにしています (Zend_Form を拡張するクラス内で):

$this->addElement('text', 'myTextField', array(
    'label' => 'The Label',
    'description' => 'The description for the field...',
    'filters' => array(
        'StringTrim',
        // etc
    ),
    'validators' => array(
        array('NotEmpty', true, array(
            'messages' => 'This field is required',
        )),
        array('AnotherValidator', true, array(
            'messages' => 'Bad value',
        )),
    // etc
    ),
));

これはうまくいかなかったと言っていますか?または、より一般的なコンテキストでバリデーターを使用していますか?その場合、@Phil Brown の (素晴らしい!) 回答が役に立ちます。

于 2011-02-03T04:14:15.597 に答える
0

setMessage を使用し、トランスレータがある場合は無効にします。

$alnum = new Zend_Validate_Alnum();
$alnum->setDisableTranslator(true);
$alnum->setMessage(
    'Not alnum!!', 
     Zend_Validate_Alnum::NOT_ALNUM
);
$validators = array('product_name' => array($alnum));

フォーム要素でバリデーターを使用する場合は、要素のトランスレーターを無効にする必要があります。

于 2011-02-03T08:02:33.117 に答える