Symfony1.4でsfDoctrineGuardPluginを使っていて、ユーザ名かパスワードが違うときに、
The username and/or password is invalid.
と表示されてしまうので、これを変更したいと思います。それと、ラベルも日本語にしておきたいと思います。
sfGuardFormSigninを継承したフォームクラスをひとつ作ります。今回は/app/front/modules/sfGuardAuth/lib/form/mySigninForm.class.phpに作りました。
<?php class mySigninForm extends sfGuardFormSignin { public function configure() { parent::configure(); $this->widgetSchema['username']->setLabel('ユーザID'); $this->widgetSchema['password']->setLabel('パスワード'); $this->validatorSchema['username']->setMessage('required', '入力して下さい'); // $this->validatorSchema['username']->setMessage('invalid', 'ユーザIDかパスワードが違います'); // 効かない $this->validatorSchema['password']->setMessage('required', '入力して下さい'); $validator = $this->getValidatorSchema()->getPostValidator(); $validator->setMessage('invalid', 'ユーザIDかパスワードが違います'); } }
PostValidatorを取得してくるのが肝です。前述のメッセージはsfGuardValidatorUserで定義されているのですが、このバリデーターはBasesfGuardFormSigninでsetPostValidator(new sfGuardValidatorUser())として呼ばれているためです。
ちなみに、mySigninFormを有効にするには、/app/front/config/app.ymlに
all: sf_guard_plugin: signin_form: mySigninForm
を追加して、デフォルトのフォームクラスを変更する必要があります。