MVCフレームワークを作ってみた。貢献お問い合わせMVCフレームワークを作ってみた。Webとある案件でテンプレートエンジンを使ってサイトを構築していたのですが、どうも処理が複雑になってくると処理と表示の分離がイマイチになってしまうのと、ディレクトリ構造の美しさが保てなくなってきたので、MVCモデルを導入してみようと。PHPなので、CakePHPあたりが良いのでしょうけども、覚えるコストが結構かかりそうなので、とりあえず簡易なものを自作してみました。MVC)は、コンピュータ内部のデータをユーザに提示し、それに対してユーザが何らかの指示を出すタイプの、独自のユーザーインタフェースをもつアプリケーションソフトウェアを、以下に述べるようなmodel・view・controllerの3つの部分に分割して設計・実装するという技法、又はそのような構造をいう。パターンなど)を利用して実装されることが多いところからすると、デザインパターンというより、さらに粒度の大きい1種のソフトウェアアーキテクチャという方が適当であろう[1][2]。部分を別のモジュールに取り替えることが容易となるのが利点である。自動プログラミングなどにも適している。Wikipediaだそうです。どのサイトを見ても上記のような感じで説明してありますが、もともとオブジェクト指向から入ったわけではないので、いまいちバチッと頭に入ってきませんでした...。今回自作することで少しわかるようになりました。ディレクトリ構造ディレクトリ構造はCakePHPを参考に、以下のような感じにしてみました。各種クラスファイル等を格納fuga.class.phpindex.php.htaccess.htaccessでリライトさせ、全てのアクセスをindex.phpに集め、そこでどのControllerに処理させるか振り分けます。各ファイルについて.htaccess原則として全てのアクセスをindex.phpにリライトさせますが、静的ファイルはwebrootに格納したいので、一旦全てのアクセスをwebrootに回し、webrootに存在しないファイルだったらindex.phpに回すようにしました。リクエストが行ったり来たりしてかなり無駄がある処理だと思うので、もう少し修正が必要かと思います(webrootをドキュメントルートにしてしまえば簡単かも。今回はサブディレクトリ内に展開する仕様なので少し混乱してこんな感じになっております)。[QSA,L]</IfModule>index.php.htaccessによってリクエストされたURLがurlという引数で渡ってくるので、それを取得して処理していきます。命名規則として、「第2階層はController名」「第3階層はメソッド名」に利用することとしています。それ以降はクエリとして処理させたいと思っていますが、これはまだ実装できていません。(例)http://example.hoge/controller/method/key/param/key/param/...ちなみに、controller、methodの初期値はindexとしています。ControllerでModelを指定して実行させるのを毎回書くのが面倒臭いので、Controllerを読み込むと同時に、Modelも読み込むようにしています。動的にController、メソッド、Modelを読み込ませたたいので、下記のような命名規則を用いています。);数カ所、設定ファイルで定義している定数を用いていますので適当に脳内変換してください。作っていて気づいたのですが、index.phpでファイルを読み込んだり処理をかいたものはControllerやModelでも使えるので便利ですね。hoge}}define.php動的にvendors内のクラスファイルを読み込むため、__autoloadを定義しておきます。);}}まとめ今まで読むばかりでほとんど試したことがなかったMVCモデルを自作すること少し理解が深まりました。上記のものは体感的に速度が遅いです。リダイレクト処理のせいなのか、index.phpのせいなのか...。後でCakePHPに入りやすいようにとCakeと同じような構成になるようにと考えながら作ったのですが、時間がかるわ遅いわで、普通にCake使ったほうが良かったと思いました...。エラー処理もしっかりしてるし...。2011.6.29作って行くと、上記のままではviewの呼び出しを各コントローラーに書かないといけないので、各コントローラーはAppControllerを継承、その中でviewの呼び出し処理を書き、index.phpでそれを呼び出しなんてことをしたり、他にも似たような処理を共通化させようとすると、結局どんどんCakeに近づいて行く...。重くなって行くorzまぁPHPでMVCフレームワークといえばCakeでしょうし、それがある種の完成系なわけだから当たり前か。ここは一度しっかりとCakeも触ってみないといけませんね。何か良い書籍なんかあるんでしょうか?チュートリアルも前バージョン?のものっぽいし...。プラグインデベロッパー。多数のプロダクトをオープンソースで開発・公開しています。開発・販売しています。記事一覧TwitterFacebookInstagramYouTubeWordPressこの記事が気に入ったらいいね!しよう最新の情報をお届けします古い投稿Macのターミナルを起動したときに、自動的にコマンドが実行さ...新しい投稿ページャクラスを作ってみた。この投稿へのコメントコメントはありません。コメントを残すコメントをキャンセルこの投稿へのトラックバックトラックバックはありません。URLホームWebMVCフレームワークを作ってみた。プラグインデベロッパー。多数のプロダクトをオープンソースで開発・公開しています。開発・販売しています。