必要最低限のMVCモデル(PHP)
PHPを調べてたらこんな記事が。
PHP10行で作る超シンプルフレームワーク - かってぃのブログ | choilog [チョイログ]
ほー面白そう。やってみよう。
とりあえず、.htaccessから
.htaccessはサーバーの動作を制御する設定ファイルみたいなものらしい。
<IfModule mod_rewrite.c> DirectoryIndex index.php RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ dispatch.php?url=$1 [QSA,L] </IfModule>
以下の部分がすべてのアクセスをdispatch.phpに
集約するようになるらしい。
RewriteRule ^(.*)$ dispatch.php?url=$1 [QSA,L]
次にdispatch.php
<?php /************************************************/ /* dispatch.php */ /* 全てのアクセスを一旦dispatch.phpに集約させる */ /* 設定は.htaccessで行う */ /************************************************/ /* グローバル変数読み込み */ require_once('./global.php'); $dataTransfer = 100; /* URI取得 */ $url = ""; if(!empty($_GET['url'])){ $url = $_GET['url']; $uri = explode('/', $url); $uri = array_shift($uri); } /* ファイルの存在確認 */ if(file_exists('./'.$uri.'Controller.php')){ /* URIをもとにコントローラーへ */ include ('./'.$uri.'Controller.php'); }else{ /* エラー画面へ */ include ('./error.php'); } ?>
http://localhost/プロジェクト名/xxxxxxxxの
xxxxxxxxを抽出して、コントローラーを割り振る。
抽出処理は以下の部分
if(!empty($_GET['url'])){
$url = $_GET['url'];
$uri = explode('/', $url);
$uri = array_shift($uri);
}
今回はxxxxxxxxの部分をtestというURIにして実装する。
以下の部分で$uriに"test"という文字列が格納されているので、
testController.phpに遷移する。
/* URIをもとにコントローラーへ */ include ('./'.$uri.'Controller.php');
testController.php
<?php /************************************************/ /* testController.php */ /* コントローラーの役割 */ /************************************************/ /* Modelを読み込む */ require_once('./'.$uri.'Model.php'); /* Modelの関数を実行 */ $dataTransfer = execute($dataTransfer); /* Viewの読み込み */ include ('./'.$uri.'View.php'); ?>
処理を記載するtestModel.php
今回は与えられた値を2倍にして返すだけの処理を記載
<?php /************************************************/ /* testModel.php */ /* 処理を行う(ここでDBアクセスとかするイメージ) */ /************************************************/ /* 実行する関数 */ function execute($params){ return $params * 2; } ?>
処理結果を出力するtestView.php
<?php /************************************************/ /* testView.php */ /* 出力画面 */ /************************************************/ ?> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>シンプルフレームワーク</title> </head> <body> <h1><?php echo $dataTransfer; ?></h1> </body> </html>
<?php /* データを受けとる変数 */ global $dataTransfer; /* URIを格納する変数 */ global $uri; ?>
http://localhost/プロジェクト名/testでアクセスすると
正常に動作する。
全体の流れとしては……
全てのアクセスをdispatch.phpにまとめる
↓
dispatch.phpでコントローラーを決定する。
↓
モデルで処理を行う。
↓
ビューで処理結果を基に出力する。
今回は記事をもとにして、実装を行った。
コントローラーの設定などがPHPファイルに直書きなので、設定内容とかを
XMLに記載し、それをPHPで読み込ませて反映させるとか
色々と改良できると思う。