0

MVCは私にとってかなり新しい概念であり、「良い習慣」と見なされるかどうか確信が持てないことをしていることに気づきました。

すべてのユーザー関連アクションを処理するコントローラーUser(から拡張) があります。CUserControllerこのコントローラーではactionLogin、ログイン要求を処理します。ログインの過程で、状況に応じて 3 つの異なるページを表示する必要があります。

  • ログインフォーム(ユーザー名/パスワードを入力)。
  • エラー メッセージ (ユーザーの詳細は一致するが、アカウントがブロックされているとマークされている場合)。
  • ログイン成功ページ (新しいメッセージがアカウントに関連付けられている場合)。

これまでのところ、次のように対処しています。

public function actionLogin(){
    ... perform some operations ...
    ... determine which page to display and set $scenario accordingly ...
    $this->render('login',array(
        'scenario'=>$scenario
    ));
}

そして、login.php(ビューファイル)で:

... perform some common operations ...
switch($scenario){
    case "login":
        ...display login...
        break;
    case "error":
        ... display error ...
        break;
    .. etc. ...
}

これにより、実際にはビュー ファイルにまったく異なるページが表示されます (密接に関連していますが)。

ビューを別のページ (例: login-form.phplogin-error.phplogin-success.php) に分割し、状況に応じて別のページをレンダリングする方がよいでしょうかactionLogin、それとも現在私がこれに対処する良い方法ですか?

4

2 に答える 2

4

最善の選択肢は、MVC デザイン パターンの Yii 解釈を修正しようとすることです。これは、私が ORM-Template-Adapter パターンと呼んでいるものです。

あなたの問題は、適切なMVCにインスパイアされた構造では、ビューはオブジェクトであり、すべてのプレゼンテーションロジックを担当し、それぞれが複数のテンプレートを管理できるという事実に起因しています。

Yii が実際に実装しようとしている MVC バリアントは、MVP: model-view-presenter です。大きな違いは、MVP のビューがパッシブであることです (これは「ダム テンプレート」と同義ではありません)。そして、あなたはそれに固執する必要があります。

認証の表現を処理するクラスを作成することをお勧めします。4 つのテンプレートがあります。

  • レイアウト - 基本的なもの、変更されない html 部分
  • ログイン - フォーム
  • エラー - まあ..それが何をするか推測してください
  • 成功

そして、新しく改善されたビューは、User コントローラー プレゼンターからの入力に基づいて、どのテンプレートを組み合わせるかを決定します。

... または、User「コントローラー」にさらにプレゼンテーション ロジックをコールド プッシュします。

于 2012-07-16T23:25:07.573 に答える
1

MVC コンテストで MVC を使用しないようにしようとしていると思います。なんで?actionLogin は単なるアクション ログインです。エラー用のページが必要な場合 (必要な場合は ...)、actionError() を作成できます。しかし、私はその理由を理解していません。多くの場合、エラーはログイン ページのメッセージに表示されます。ビューをビューと考えてください (html、css、js のみ)。モデルをデータ (配列、クエリ結果) と考えてください。コントローラーは、ビューを取得し、データのソースでレンダリングする人だと考えてください。止まる。特定のデータを含む特定のビューが必要ですか? そのビューを作成して、そのデータを取得するだけです。最後になりましたが、マッシュアップ用に独自のコントローラーを作成します。

于 2012-07-16T23:25:36.870 に答える