私はZend_Formを拡張するRecipeFormを拡張するLoginFormというフォームを持っています。 RecipeFromは私のデコレータだけを返します。Zend Frameworkでのカスタムバリデータの問題
フォームが送信されると、「メッセージ:メソッドaddValidatorが存在しません」というエラーが表示されます。
class Recipe_Form_LoginForm extends Recipe_Form_RecipeForm {
public function init()
{
parent::init();
$this->setName('loginform')
->setAction('/login');
// Add Email Element
$email = $this->addElement('text', 'email', array(
'label' => 'Email Addresses',
'required'=> true,
'size'=>12,
'filters'=>array('StringTrim'),
'decorators' => $this->getElementDecorator('email'),
));
$email->addValidator(new Recipe_Validate_EmailAddress(), true, array(
'messages' => array(
Recipe_Validate_EmailAddress::INVALID =>
'Please enter email in correct format',
Recipe_Validate_EmailAddress::EMAILISEMPTY =>
'Please enter email address'
)));
}
class Recipe_Validate_EmailAddress extends Zend_Validate_Abstract
{
const INVALID = 'notvalid';
const EMAILISEMPTY = 'isempty';
protected $_messageTemplates = array(
self::INVALID => "Email is in invalid format",
self::EMAILISEMPTY => "You have to fill email field"
);
public function isValid($value){
$response = parent::isValid($value);
if(!$response){
$this->_message = array(self::INVALID => "Please enter a valid email address");
}
return $response;
}
}
?>
drew010、あなたは絶対に正しいです!私はあなたの答えを受け入れるつもりです、今、私のバリデーターが呼び出されたからです。私のカスタムエラーメッセージを返すことができない理由を教えてもらえますか? '有効なメールアドレスを入力してください'と表示する代わりに、$ this - > _ message = array(self :: INVALID => "有効なメールアドレスを入力してください");表示されるのはデフォルトのZend Frameworkメッセージです。配列([email] => Array([0] => emailAddressInvalidFormat [1] => emailAddressInvalidFormat)[pswd] => Array()[submit] => Array()) – stevepop
@stevepop 2番目の質問に答えるために私の答えを更新しました。希望が役立ちます。そうでない場合や、ご不明な点がありましたら、お気軽にコメントしてください。 – drew010
HI drew010、新しい追加ありがとう。私はそれを試みたが、私はフォーム上でこのエラーが発生し続ける。 'メッセージ:無効なバリデータがaddValidatorに提供されました。文字列またはZend_Validate_Interface 'でなければなりません。なぜ私は文字列やオブジェクトとして 'EmailAddress'を見ていないのですか? Zend_Validate_EmailAddressを最初にインスタンス化してから、setMessages()を呼び出してメッセージの配列を渡すと、私はそれを動作させることができる唯一の方法であることが分かります。しかし、あなたのために上記の作品が、なぜ私はそのエラーを取得するのですか? – stevepop