1

初心者の質問。

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クラスでモデルを使用するにはどうすればよいですか?

最良/高速のアプローチはどれですか?他の可能性?

4

1 に答える 1

2

sfDoctrineGuardPluginのバリデーターのコードを見ると非常に便利だと思います。彼らはその投稿バリデーターを作成し、それをフォームに設定します。sfDoctrineGuardPlugin(またはPropelを使用している場合はsfGuardPlugin)を使用したくない場合でも、そのコードは貴重なインスピレーションの源になります。

于 2010-07-16T23:44:26.040 に答える