この記事では、まず PHP の MVC 実装原則を紹介します。私たちのフレームワークの MVC 部分もこの原則に基づいて実装されていますが、今日のコードはフレームワーク内のコードではありません。原理を説明するだけです
1. ファイル構造
3つのフォルダーを作成します
コントローラーフォルダーにはコントローラーファイルが保存されます
ビューフォルダーにはビューファイルが保存されます
モデルフォルダーにはデータファイルが保存されます
唯一の入り口としてindex.phpを作成します
2.コントローラー
controllerフォルダーにdemocontroller.phpファイルを作成します。ファイルの内容は以下の通りです
クラスDemoController
{
関数index()
{
echo('hello world');
}
}
/* ファイルの終わりdemocontroller.php */
このファイルでは、DemoController という名前のオブジェクトを作成し、hello world を出力するインデックス メソッドが含まれています。次に、index.phpのDemoController内のindexメソッドを実行します。
index.phpのコードは以下の通りです
require('controller/democontroller.php');
$controller=new DemoController();
$controller->index();
/* ファイルの終わりindex.php */
index.php を実行すると、予想通り、長い間失われた Hello World が表示されます。これら 2 つのファイルは非常にシンプルですが、MVC の本質を少し明らかにし、唯一の入り口を通して実行したいコントローラーを実行します。もちろんコントローラー部分はuriで決まるはずなので、どのコントローラーを実行するかをuriで判断できるようにindex.phpを書き換えましょう。
index.phpの書き換えたコードは以下の通りです
$c_str=$_GET['c'];
//コントローラーを実行させます
$c_name=$c_str.'コントローラー';
//規約上、URLから取得したコントローラ名にはControllerが含まれていないので、ここに記入します。
$c_path='controller/'.$c_name.'.php';
//規約によれば、コントローラーファイルはコントローラーフォルダーに作成し、クラス名はファイル名と同じにし、ファイル名はすべて小文字にする必要があります。
$method=$_GET['a'];
//アクションを実行します
require($c_path);
//コントローラーファイルをロードする
$controller=new $c_name;
//コントローラーファイルをインスタンス化する
$controller->$method();
//このインスタンスでアクションを実行します
/* ファイルの終わりindex.php */
ブラウザに http://localhost/index.php?c=demo&a=index と入力し、Hello World を取得します。もちろん、別のコントローラーがあり、それを実行したい場合は、url パラメーターの c と a の値を変更するだけで済みます。
ここで説明すべき質問がいくつかあります。
1. PHP は動的言語です。必要なオブジェクトを直接取得し、文字列 new、つまり上記の新しい $c_name を通じて必要なメソッドを実行できます。$c_name は new 'DemoController' として理解できます。もちろん、新しい「DemoController」を直接記述することはできません。「DemoController」文字列は変数を介して転送する必要があります。方法は同じです。
2番目に、URLのcの値はdemoです。これは、$c_nameの値がdemoControllerである必要があることを意味します。PHPは大文字と小文字を区別しますという文もPHPでは不完全です。大文字と小文字が区別されるのは、変数 (前に $ が付く) と定数 (define で定義される) だけですが、クラス名、メソッド名、さらには一部のキーワードは大文字と小文字が区別されません。また、true、false、null などは、すべて大文字またはすべて小文字のみにすることができます。もちろん、実際のエンコード処理では大文字と小文字を区別する必要があります。
三、見る
前のコントローラーでは「hello world」を出力しただけで、mvc の効果は得られませんでした。次に、これをベースに view 関数を追加します。これで、ビューの追加方法は大体誰でも思いつくようになったと思います。関数。はい、それは邪悪な require または include によって達成されます。
まず、view フォルダーの下にindex.php を作成し、何でも書きます (笑、まだ hello world と書きました)。次に、以前の DemoController を書き直します。コードは次のとおりです:
クラスDemoController
{
関数index()
{
require('view/index.php');
}
}
/* ファイルの終わりdemocontroller.php */
ブラウザで再度実行して、必要な内容が出力されているかどうかを確認します。
次に、コントローラーを通じていくつかのデータをビューに渡します。コードは次のとおりです。
クラスDemoController{
関数index()
{
$data['title']='最初のタイトル';
$data['list']=array('A','B','C','D');
require('view/index.php');
}
}
/* ファイルの終わりdemocontroller.php */
viewフォルダー配下のindex.phpファイルのコードは以下の通りです:
<頭>
foreach ($data['list'] as $item)
{
$item をエコーします。'
';
}
?>