6

コントローラーを整理する最良の方法は何ですか。ユーザーコントローラーと登録アクションがあるとしましょう。データを検証して処理する process_registration アクションも必要です。または、登録アクション自体の中ですべての処理を行う必要があります。それを必要とするすべてのアクション(登録、process_registrationなど)に対して検証/処理アクションが必要ですか?

また、多くの人が情報の検証と処理のためだけにモジュールとコントローラーを持っていることにも気付きました (おそらく、すべての検証ロジックとルールを 1 か所に保持すると思いますか?)。

私の質問は、物事をどのくらい離す必要があるかということだと思います。この質問は、モデルとビューにも当てはまります。

4

3 に答える 3

3

通常、検証はモデルで行う必要があります。それが MVC パラダイムのポイントのようなものです。コントローラー ロジックはアクション間でユーザーをバウンスするものであり、ビューは純粋に表示用であり、ビジネス ロジックはモデル内にあります。

特定のフレームワーク (CodeIgniter) は、ロジック (検証など) が接続されていないモデルをフラット オブジェクトにすることで、MVC の意図から大幅に逸脱し、検証ロジックをコントローラー レイヤーに移動する必要がありますが、その時点で「モデル」は実際にはまったくモデル化されていませんが、美化された配列です。

"register" と "process_register" という 2 つのアクションがある限り、投稿と取得の要求に対して異なる応答をする 1 つのアクションを使用する方がはるかにクリーンです。このアクションを「作成」と呼んでRESTfulを維持し、フレームワークが「/ register」を「/ user / create」にマップするルートを定義する場所にルートを定義します

疑似phpの例:

<?php

class User_controller {
  // [GET|POST] /users/create
  function create() {
    $user = new User();
    $error = '';

    if (postback) {
      // form has been submitted.
      $user->name = $_POST['name'];
      $user->password = $_POST['pasword'];

      if (validate_user($user)) {
        $user->save();
        redirect("user/show/$user->id");
      }
      // user save failed, fall through to displaying the new user form
      // the user's name and password (and other fields) are now populated,
      // and will display
      $error = 'Account creation failed.';
    }

    // Render the view with the user and the error message (if any)
    render('views/users/create', $user, $error);
  }
}

?>
于 2009-12-31T18:23:00.240 に答える
1

私の感覚では、モデル内で検証と「処理」を維持するのが最善です。コントローラーは、モデル関数へのリクエストのマッピングを管理するためにのみ使用してください。

「Zend Framework: Surviving The Deep End」のこのセクションは読みやすいかもしれません。

于 2009-12-31T18:24:09.927 に答える
0

あなたの質問に基づいて私ができる最善のアドバイスは、サイトをモジュール化したい程度にコントローラー内でアクションを分割したいということです。アクションは一意の URL に関連付ける必要があるため、あるアクションから別のアクションに継続的に移行する場合、処理と SEO の両方にコストがかかることにも注意する必要があります。

以下は、登録アクションから登録を分離したい使用例の 1 つです。サイト全体のさまざまな場所で AJAX を介してユーザーを登録できるようにしたいと考えています。登録ページに移動して登録データを処理するための別のアクションを使用すると、登録ページと、任意のページの登録ライトボックスまたはクイック登録ドロワーの両方でアクションを再利用できる可能性が高くなります。

登録プロセスと登録ページを分割したくない場合は、静的な登録ページのみを計画している場合です。これにより、フォーム データを受信して​​いるかどうかを確認して確認し、フォームの表示と処理を 1 つのアクションで行うことができます。

于 2009-12-31T19:14:41.757 に答える