1

フォームに 2 つのテキスト フィールドがあり、空の値や同じ文字列が含まれていないことを確認する必要があります。

私が作成したカスタム バリデータは Zend_Validate_Abstract を拡張し、正しいエラー メッセージを返すという点で正しく動作します。この場合、isEmpty または isMatch のいずれかです。

ただし、ドキュメントには、addErrorMessages を使用して、表示される正しいエラー メッセージを定義するように記載されています。

この場合、私は添付しました

->addErrorMessages(array("isEmpty"=>"foo", "isMatch"=>"bar"));

フォームフィールドへ。

私が読んだすべてによると、isValid() から「isEmpty」を返す場合、エラー メッセージは「foo」と表示され、「isMatch」を返す場合は「bar」と表示されるはずです。

これは私が遭遇しているケースではありません。$this->_error() を何に設定しても、false を返すと、エラー メッセージ配列の index[0] にあるものは何でも表示されます。

errorMessages を定義しない場合は、表示用に返されたエラー コードを取得するだけで、返された内容に応じて適切なエラー コードが取得されます。

エラー コードをキャッチして、正しいエラー メッセージをフォームに表示するにはどうすればよいですか?

私が実装した修正は、適切に理解するまで、カスタムバリデーターからのエラーコードとして完全なメッセージを返すことです。これはこのインスタンスでは機能しますが、エラー メッセージはこのページに固有のものであり、実際にはコードの再利用は許可されていません。

私がすでに試したこと: カスタムバリデーターが一致のみをチェックするように、バリデーターチェーンを既に試しました:

->setRequired("true")  
->addValidator("NotEmpty")  
->addErrorMessage("URL May Not Be Empty")  
->addValidator([*customValidator]*)  
->addErrorMessage("X and Y urls may not be the same")  

ただし、どちらかがエラーをスローした場合は、実際のエラーに関係なく、最後に設定されたエラー メッセージが表示されます。

ここからどこへ行くべきか完全にはわかりません。

助言がありますか?

4

1 に答える 1

2

説明書を読み間違えたようです。それは言う

addErrorMessage($message) : フォーム検証エラー時に表示するエラー メッセージを追加します。これを複数回呼び出すことができ、新しいメッセージがスタックに追加されます。

addErrorMessages(array $messages) : フォーム検証エラーで表示する複数のエラー メッセージを追加します。

これらの関数は、カスタム エラー メッセージをフォーム スタック全体に追加します。

検証が失敗したときに検証エラー メッセージを表示する場合は、バリデータ内にメッセージを実装する必要があります。

すなわち。

const EMPTY = 'empty';

protected $_messageTemplates = array(
  self::EMPTY => "Value is required and can't be empty",
);

public function isValid($value)
{
  if(empty($value)) {
    $this->_error(self::EMPTY);
    return false;
  }

  return true;
}

このようにして、検証が失敗した後、 を使用してエラー コードを取得し、 を使用$validator->getErrors()してエラー メッセージを取得できます$validator->getMessages()

$_messageTemplates適切に定義されている場合Zend_Form、エラー コードの代わりにエラー メッセージが自動的に使用され、出力されます。

お役に立てれば。

于 2010-05-16T14:31:43.067 に答える