0

私は、PHP を使用したモデル、ビュー、コントローラー フレームワークの学習の初期段階にいます。hereにあるチュートリアルのおかげで、コツをつかんでいます。私の理解では、コントローラーはモデルを呼び出して、表示可能なコンテンツを正しくレンダリングするために適切なコードを実行できるようにします。

問題は、その特定のチュートリアルに基づいて、データを表示可能にするためにモデルを呼び出すためだけに、ページごとにまったく新しいファイルを作成する必要があるように思われることです。

たとえば、私の controller.php ファイルには次のものがあります。

require_once("model.php");  

class Controller 
{  
    public $file;
    public $league;

    public function __construct($file, $league)  
    {
        $this->file = $file;  
        $this->league = $league;
    }   


    public function invoke()  
    {
        // Everything that needs to be done in PHP will be done here so that once 
        // whatever file is included, it will just fit in fine and echo out perfectly
        require_once($this->file.".php"); 
    }
}

私のmodel.phpファイルには、次のものがあります。

class Model 
{
    private $file;
    private $league;

    public function __construct($file, $league)
    {
        $this->file = $file;
        $this->league = $league;
    }

    More code. You get the idea...
}

私のteams.phpファイルには、次のものがあります。

$controller = new Controller("teams", "nba");  
$controller->invoke();

しかし、teams.php はモデルを呼び出す必要があり、最終的には require_once("teams.php") になるため、ビューのためだけにまったく新しいファイルを作成する必要があります。これで、teams_display.php にディスプレイが表示されます。とにかく、mod の書き換えがフレームワークを容易にするのに役立つということはありますか?それによって、すべてのページが index.php ファイルで発生し、ユーザーにはそうではないという錯覚を与えますか?

4

2 に答える 2

2

すでに述べたように。MVCはフレームワークではありません。

MVCは非常に古いデザインパターンであり、元々はsmalltalk用に定義されていました。何年にもわたって、それは幾分進化し、いくつかの関連するパターンを生み出し、それらはWebでの使用に適応されてきました。

MVCの中心的なアイデアは、関心の分離です。これが、MVCとすべてのMVCに触発されたパターンが2つのレイヤーで構成されている理由です。

  • プレゼンテーション層、すべての形式のインターフェイスを処理します
  • ストレージをビジネスロジックとして処理するモデルレイヤー。

これらは2つの異なるレイヤーであるため、他のレイヤーの内部構造を認識してはなりません。そうしないと、抽象化がリークしてしまいます。

プレゼンテーション層

適切に実装されたMVC構造では、コントローラーはモデルレイヤーの状態(まれに、現在のビューインスタンスの状態)のみを変更します。コントローラは、モデルレイヤーまたはその中の構造のインスタンス化について責任を負いません。

MVCのビューインスタンスは、ユーザーへの応答の生成を担当する必要があります。場合によっては、HTTPロケーションヘッダーのみを送信する必要がある場合もあれば、複数のテンプレートを組み合わせてHTML出力を生成する場合もあります。モデルレイヤーから、必要なリクエストデータを表示します。

この文脈では、「ユーザー」は人間ではなく、ウェブサイトと通信しているブラウザです。

モデルレイヤー

この層は通常、3つの主要な構造グループから構成されています。

  • 特定のビジネスエンティティのロジックを処理するドメインオブジェクト
  • ドメインオブジェクトからのデータを保存できるストレージ抽象化(通常は-データマッパー)
  • アプリケーションロジック(ドメインオブジェクトとストレージ抽象化の間の相互作用)を含むサービス

プレゼンテーション層は、サービスを介してモデル層と相互作用します。コントローラはデータを送信し、モデルレイヤーの状態を変更しますが、ビューインスタンスはそれらからデータを要求します。

興味がある場合は、ここで利用可能なモデルレイヤーのもう少し長い説明があります。

PS

PHPフレームワークは避けてください。それらのどれも実際にMVCを実装していません。代わりに、それらのほとんどは純粋なRailsクローンであり、それ自体が本番ステージのフレームワークになることを意図したものではありませんでした(ここで説明します)。

于 2013-01-23T09:29:25.667 に答える
2

MVC is not a framework but a design pattern. This tutorial will help you understand the MVC pattern but if you want to use a real framework you can take a look at Zend Framework.

In your case index.php is the entry point, mod rewrite redirect all the requests to index.php who is redirecting to the appropriate controller according to the user request. For example, http://localhost/teams/nba, 'teams' is the controller, 'nba' is the action.

You have to create a TeamController and in the controller you have to create a 'nba' action. The model is dealing with the DB layer so create a Team model with getNbaList method to retrieve all the NBA teams. You have to call the model inside your action and then you can feed the view (mainly html) with all the teams you get from the model.

于 2013-01-23T09:07:48.220 に答える