初心者の質問。
symfonyで非常にシンプルなLoginFormクラスを作成しました。ユーザーがユーザー名とパスワードをフィールドに挿入したかどうかをチェックし、期待どおりに機能します。
// UserLoginForm :: configure()
$this->setWidgets(array(
'username' => new sfWidgetFormInputText(),
'password' => new sfWidgetFormInputPassword(),
));
$this->setValidators(array(
'username' => new sfValidatorString(array('required' => true),
'password' => new sfValidatorString(array('required' => true)
));
// Action :: executeLogin()
$this->loginForm = new UserLoginForm();
if ($request->isMethod('post')) {
$params = $request->getParameter('login');
$this->loginForm->bind($request->getParameter('login'));
if ($this->loginForm->isValid()) {
// ... more code
}
}
ここで、データベース内のユーザー名フィールドの存在を確認しようとしています。存在しない場合は、フォームを無効にします。パスワードについても同じです。ユーザー名とパスワードのペアが存在しないが、メッセージが異なる場合。
私が検索した解決策を2つの方法で見つけようとしています。
アクションで:
- dbにクエリを実行し、
- ユーザー名を確認し、
- フォームのユーザー名フィールドを無効にします(結果のHTMLにエラーメッセージが必要です)。
- ユーザー名とパスワードのチェックについても同じです
この場合、フォームを無効にするにはどうすればよいですか?テンプレートでエラーメッセージを処理する方法は?
isValid()メソッドを呼び出すフォームクラス:
- setValidator()に何かを追加します
- または、モデルをクエリするプライベート関数を呼び出すポストバリデーターを追加します
この場合、Formクラスでモデルを使用するにはどうすればよいですか?
最良/高速のアプローチはどれですか?他の可能性?