]1(PHP)MVCモデルを使ったPHPアプリケーションPHPのフレームワーク(CakePHP等)は、元からMVCモデルとなっているわけですが、機能も多く重量級です。軽量のMVCフレームワークもあるのかもしれませんが、ほんとに小規模なPHPアプリケーションとかだと、案外自作にした方が効率がよいのかもしれません。5年度前に、以前の勤務先で自作MVCモデルを使ってたんですが、しばらくPHP触らない間にすっかり忘れていました。オブジェクト指向PHP.NETを参考に、軽量なMVCフレームワークを作ってみました。MVCの概念は多くのサイトで解説されているので省略します。今回作成するのは、大まかに下記のような構造になります。リクエス振り分けまずは、リクエスト振り分けの部分です。集中させ、そこからURLの内容に基づきどのコントローラのどのアクションに処理を割り振るかを制御します。対してGETパラメータを付ける方法と、/区切りでパラメータを付ける方法があります。区切りでパラータを指定する方法を取りました。みたいな感じ)参考先の設定ではサイト直下にMVCコンテンツを置くような設定になっています。イントラネットのサーバ等で1台のWEBサーバにWEBアプリが乱立していると、サイト直下に配置できないケースが出てくるんですよね。部署のディレクトリの配下にコンテンツ置く必要がある場合など)ということで、特定の階層以下からコントローラのパラータとみなすように手を加えてみました。配下にMVCモデルで作ったコンテンツを置くこととします。apacheのリライト機能の設定です。以下のように設定しました。指定するとこで、GETパラメータも引き継げます。[QSA,L]※当然MVCアプリコンテンツのパスが変わると、mod_rewriteの設定は変わります。下記のようになります。Dispatcher();IncludePathSetting($dispatcher);//apacheのドキュメントルートから何階層目のディレクトリにMVCアプリを配備するか。配下は1階層目に当たるので、1とする。PHPのinclude_pathを設定。本番環境、テスト環境を切り分ける。$path);}?>Dispatcher.phpこのPHPファイルで、リクエストを振り分けます。1つめのパラメータで、どのコントローラを使うか決めます。いうクラスのインスタンスを作成します。2つめのパラメータでどのアクションメソッドを実行するか決めます。いうメソッドを実行します。//URLの階層設定。どの階層からをパラメータとして解釈するか。どの階層からをパラメータとして解釈するか。}}?>xxxController.php各コントローラのクラスファイルです。ここで、モデル、ビューへの制御を行います。)の任意のメソッドを実行。)の任意のメソッドを実行。}}?>xxxModelクラス.php各モデルのクラスファイルです。このクラス内でDBにアクセスしたりと、メインロジックを書いて行きます。//各処理毎にメソッドを作成。}?>リクエストブラウザから送信されるリクエストですが、これもクラス化してやります。詳しいコードは、(PHP)MVCモデルを使ったPHPアプリケーション(リクエスト部分)を参照にしてください。コントローラからリクエストを取得するには下記のようにします。//とすると、全POST情報を取得できます。ビュービューは前述のとおり、テンプレートエンジンであるSmartyを使います。コントローラにSmartyのインスタンスを作成し、テンプレートを指定して表示するという方法です。Smartyについては大量に情報が出まわってますし、3流PGのメモ書きにもちょこっと書いてるのでそのあたりが参考になるかもです。考えると結構簡単にMVCモデルって作れるんですね。オブジェクト指向的には、コントローラやモデルクラスでベースクラスに汎用処理埋め込み、それを継承して各クラス別の処理を書くのが理想なんでしょうが、今回はMVCの基本的な部分だけということなので、以上です。参考先には、継承をつかった話も書いているので、見てみるといいかもしれません。PHP開発(PHP)MVCモデルを使ったPHPアプリケーション(リクエスト部分)(PHP)MVCモデルを使ったPHPアプリケーションのリクエスト部分のソースです。GET,POSTで送られてくるリクエストをオブジェクトとして扱えるようクラス化します。参考先まるままですが、こんな感じ。Request.phpコントローラからはこのクラスを呼び出し、リクエストにアクセスします。}}?>RequestVariables.phpリクエストの変数を抽象化するためのクラスです。}}?>Post.phpPOST変数を抽象化します。}}?>QueryString.phpGET変数を抽象化します。情シスで何でも屋の三流プログラマのコーディング、サーバ管理、PC生活関係のメモ書き。このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。30検索カテゴリ全体Linuxサーバがらみ.Net開発PHP開発C/C++開発JavaSQLツール思ったこととかニュースとか。メッセージを入力してください。