PHPでmvcを実装する方法

藏色散人
リリース: 2023-03-07 21:36:01
オリジナル
3362 人が閲覧しました

php メソッドによる mvc の実装: 最初にページをリクエストするときに URL に同意し、次に MVC のディレクトリ構造を計画し、次にコントローラー コントローラーを作成し、URL 内のパラメーターを使用して使用するコントローラーを決定します。最後にビュー View とモデルを設定し、エントリ ファイルを変更します。

PHPでmvcを実装する方法

推奨:「PHP ビデオ チュートリアル

このチュートリアルの動作環境: Windows 7 システム、PHP バージョン7.1、この方法はすべてのブランドのコンピューターで機能します。

php は mvc を実装します

PHP での MVC の使用は、特に一部のオープン ソース フレームワークでますます一般的になりつつあります。ほとんどの状況では MVC で十分ですが、比較的単純な個人ブログなど、適さない状況もあります。記事が数百しかないブログの場合、MVC を使用するのは少し複雑すぎるように感じます。記事が数百しかないブログの場合も同様です。記事で述べたように、MVC はほとんどの状況には適していませんが、Sina などのポータル Web サイトで MVC を使用すると、大量のファイルが読み込まれるため、速度への影響は許容できません。 Maple Bamboo Dream では、MVC の基本原理と簡単な実装を紹介します。次の導入は PHP 開発に適しています。

MVC in PHP

MVC[1] は、ソフトウェア エンジニアリングにおけるソフトウェア アーキテクチャです。 PHP の観点から見ると、MVC は少し異なります。

モデル(モデル)、プログラムアプリケーションの機能の実現、プログラムロジックの実現。 PHPでのデータ管理とデータ生成を担当します。

View (ビュー)、グラフィカル インターフェイス ロジック。 PHP での出力を担当し、テンプレートと必要なリソース ファイルの呼び出し方法を処理します。

Controller (コントローラー) は、リクエストの転送とリクエストの処理を担当します。 PHP では、呼び出されるビューと使用されるデータがリクエストに基づいて決定されます。

MVC を使用する理由

MVC の主な機能は、コードを階層化して分類することです。

MVC の主な目的は、Web 開発における開発作業と設計作業を分離し、作業を比較的独立させるという問題を解決することです。

このプロセス中に、Web サイトのディレクトリ構造が明確になり、Web サイトの保守と拡張が容易になり、モジュールを再利用できるなど、他の利点も発見しました。

MVC の実装

リクエスト URL

まず、ページをリクエストする際の URL を合意し、次の構造:

localhost/index.php?c=demo&a=index&param=welcome
ログイン後にコピー

より美しい URL 構造を取得したい場合は、URL 構造の最適化を行うことができますが、この URL 構造の最適化はこの記事とはあまり関係がないため、後ほど共有します。

上記のパラメータからわかるように、アクセスされるファイルは index.php で、これには 3 つのパラメータも含まれています: caパラメータ

MVC ディレクトリ構造

次に、MVC のディレクトリ構造を次のように計画します。

/*
├─www                       # 网站根目录
│  ├─controller             # 控制器目录
│  │  ├─democontroller.php  # demo控制器
│  ├─model                  # 模型目录
│  │  ├─model.php           # model模型
│  ├─view                   # 视图目录
│  │  ├─index.php           # index视图
│  ├─index.php              # 入口文件
*/
ログイン後にコピー

Controller コントローラー

以下を追加します。コード controller/democontroller.php ファイルに移動します。

// controller/democontroller.php
class DemoController
{
    public function index()
    {
        echo 'hello world';
    }
}// End of the class DemoController

// End of file democontroller.php
ログイン後にコピー

このファイルには DemoController のクラスが 1 つだけ定義されており、#index# # が 1 つだけ含まれています。 #hello world を出力するために使用される #メソッド。 次のコードをエントリ ファイル

index.php

ファイルに追加します。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">1 //index.php 2 require(&amp;#39;controller/democontroller.php&amp;#39;); 3 $controller = new DemoController(); 4 $controller-&gt;index(); 5 6 // End of index.php</pre><div class="contentsignin">ログイン後にコピー</div></div> 上記で同意した URL を使用してブラウザでアクセスし、出力

hello world

を確認します。もちろん、リクエストした URL がそのようなものではなくても、以下に示すように、同じ出力を取得できます。

localhost/index.php?c=abc
ログイン後にコピー

URL 内のパラメーターは効果がないことがわかりました。

次の URL を使用してアクセスした場合、何も出力されないことが予想されます。

localhost/controller/democontroller.php
ログイン後にコピー

この Web サイトにアクセスして正しい結果を取得したい場合は、現在

index.php

を通じてのみアクセスできることがわかります。そのため、この Web サイトはエントリー ファイルと呼ばれています。 。これで、パラメータに関係なく同じページにのみアクセスできるようになりました。では、異なる結果を表示するにはどうすればよいでしょうか?あるいは、別のコントローラーを呼び出すのはどうでしょうか? エントリ ファイルを改善します

以下では、URL 内のパラメーターを使用して、使用するコントローラーを決定します。

//index.php
// get runtime controller prefix
$c_str = $_GET[&#39;c&#39;];
// the full name of controller
$c_name = $c_str.&#39;controller&#39;;
// the path of controller
$c_path = &#39;controller/&#39;.$c_name.&#39;.php&#39;;
// get runtime action
$method = $_GET[&#39;a&#39;];
// load controller file
require($c_path);
// instantiate controller
$controller = new $c_name;
// run the controller  method
$controller->$method();

// End of index.php
ログイン後にコピー

また、上記で同意した URL を使用してブラウザでアクセスし、出力

hello world

を確認します。コード内のコメントは、各ステップの目的を説明しています。もちろん、URL パラメーターの ca の値を変更することで、さまざまなコントローラーとそのメソッドを呼び出して、さまざまな結果を出力することができます。 ViewView

以前はコントローラ コントローラのみを使用し、エントリ ファイル

index.php

で別のコントローラを動的に呼び出していました。次に、ビューを結合すると分離が表示されます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">// view/index.php class Index { public function display($output) { // ob_start(); echo $output; } } // End of index.php</pre><div class="contentsignin">ログイン後にコピー</div></div>ビュー ディレクトリ内の Index.php ファイルは

Index

メソッドを定義しており、変数の出力を担当する display() 関数は 1 つだけあります。それに渡されました。 以下のコントローラー ファイルを変更します。

// controller/democontroller.php
class DemoController
{
    private $data = &#39;Hello furzoom!&#39;;
    public function index()
    {
        //echo &#39;hello world&#39;;
        require(&#39;view/index.php&#39;);
        $view = new Index();
        $view->display($data);
    }
}// End of the class DemoController

// End of file democontroller.php
ログイン後にコピー

A

data

プライベート変数がコントローラーで定義されています。index() メソッドは直接出力しなくなり、ビュー オブジェクトを使用して出力を処理します。この時点で、上記の合意された URL に従ってアクセスすると、出力が表示されます: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">Hello furzoom!</pre><div class="contentsignin">ログイン後にコピー</div></div><p>可以根据不同的请求调用不同的视图类,以不同的形式显示数据。这样就将增加了视图的作用,设计人员可以只针对视图进行页面的设计。</p><h3>模型Model</h3><p>上面貌似已经很cool了,但是显示什么样的内容是在控制器中直接指定的,希望内容也由URL指定,这样将数据的处理交给模型来处理。</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">// model/model.php class Model { private $data = array( &amp;#39;title&amp;#39; =&gt; &amp;#39;Hello furzoom&amp;#39;, &amp;#39;welcome&amp;#39; =&gt; &amp;#39;Welcome to furzoom.com&amp;#39;, ); public function getData($key) { return $this-&gt;data[$key]; } } // End of model.php</pre><div class="contentsignin">ログイン後にコピー</div></div><p> 视图文件model.php定义了一个<code>Model类,类中定义了一个getData()的方法,用于返回请求的数据。

同时修改入口文件index.php如下:

//index.php
// get runtime controller prefix
$c_str = $_GET[&#39;c&#39;];
// the full name of controller
$c_name = $c_str.&#39;controller&#39;;
// the path of controller
$c_path = &#39;controller/&#39;.$c_name.&#39;.php&#39;;
// get runtime action
$method = $_GET[&#39;a&#39;];
// get runtime parameter
$param = $_GET[&#39;param&#39;];
// load controller file
require($c_path);
// instantiate controller
$controller = new $c_name;
// run the controller  method
$controller->$method($param);

// End of index.php
ログイン後にコピー

增加了一个参数$param,将其作为控制器的方法调用参数。

还需要修改控制器的方法根据不同参数取得不同的数据。

// controller/democontroller.php
class DemoController
{
    // private $data = &#39;Hello furzoom!&#39;;
    function index($param)
    {
        // echo &#39;hello world&#39;;
        require(&#39;view/index.php&#39;);
        require(&#39;model/model.php&#39;);
        $model = new Model();
        $view = new Index();
        $data = $model->getData($param);
        $view->display($data);
    }
}// End of the class DemoController

// End of file democontroller.php
ログイン後にコピー

包含需要的视图文件和模型文件,然后生成视图与模型文件,接着通过模型对象取得数据,再用视图对象来输出取得的数据。

此时,在浏览器中使用上面的约定的URL进行访问,将得到输出如下:

Welcome to furzoom.com
ログイン後にコピー

至此PHP的MVC模式已经基本介绍完成了,剩余的工作就是根据需要进行添加扩充了,很简单吧!!

以上がPHPでmvcを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート