重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

PHPで小規模~中規模なシステム構築を行っております者です。
例えば、下記のようなものです。

(1)小規模:簡易な新着ニュースの更新のみ行うCMSなど
(2)中規模:ショッピングカートなど

今回、自身の作ってきたシステムをリニューアルするにあたり、
勉強も兼ねてMVCというものを意識して構築してみようかと思ったのですが、
調べれば調べるほど役割やファイルの分け方で迷ってしまうばかりです。(特にCとM)


なお、cakePHPなどは使っておりません。
smartyは使用しています。

(1)を使って示しますと、例えば下記のようなファイルわけをしていたとします。
(レイアウト崩れが怖いため、中途半端なツリー記載ですがご勘弁ください。)

index.php ・・・ IDパスが未入力の場合はログイン画面を、入力済の場合は管理画面トップ

┣ controllers ━ control用php

┣ models ━ 登録処理class.php DB接続class.php ログイン関連class.php(ログイン・ログアウト処理、ログイン保持など)

┣ views ━ 各種tpl

┗ その他ファイル(smarty,pear,DB接続情報等記載ファイル,共通使用変数など記載ファイル)

色々なところで見かけるのは、C.M.V、いずれもclassなどが記載してあるのみですが、
そのクラスをどこで宣言し、どこで使っているのかが良く分かりません。

例えば、 パラメーターが ・・・・・?action=config&news_id=15 とあり、
DB内のid15の記事を抽出し、
今行うべき処理が?action=configより記事の更新だと判断し、
画面を表示するという処理の流れがあるとします。

その場合、
●パラメーターの$_GETはどこに書くのか?
●?action=configより処理が記事の更新だとの判断は
●その他ファイル(smarty,pear,DB接続情報等記載ファイル,共通使用変数など記載ファイル)の読み込みはどこで行うのか?
●modelsのclassをnewで宣言するのはどのファイルなのか?
など、


現在私が行っている方法は、
index.phpに上から

・セッションスタート
・各種定数および変数の記載
・smarty設定
・DBクラスなど必ず使うものを宣言
・パラメーターから判断して必要なクラスを読み込んで宣言+処理記載(switchで切り替えてます)
・smartyのdisplayでtplの内容を表示

というものをすべて記載しております。一応形としてはCにあたるのでしょうか。
上のツリーではcontrollers ディレクトリがありますが、
この内どれかをそこに移し、index.phpから読み込むべきでしょうか?
(今のところ役割がみあたりません)

また、modelsというのは要するにclassなどが記載してあるだけでしょうか?
models内ではnewせず$_GETせず、models内のclassの処理を実際に
実行する記載は「C」に書くということでしょうか。

よくわからない文章になってしまい申し訳ございません。
正解はないかもしれませんので、あくまで皆様の行っているやり方や一般的に使われている方法で結構です。

ファイルわけや処理の記載についてお教えいただけると幸いです。
よろしくお願いいたします。

A 回答 (2件)

とりあえずフレームワークでも勉強したら?

    • good
    • 0
この回答へのお礼

基本的にデザイン→コーディング→プログラムと一人作業なので、
細かに分けると逆に面倒ぐらい思って作業しておりましたが、
いざしっかり分けてみると管理しやすいものですね。

フレームワークについてもまだまだ完璧に理解は及んでおりませんが、
少しづつでもモノに出来ればと思います。

ご回答ありがとうございます。

お礼日時:2011/08/12 12:49

私はこんな感じです。


Front
 ・初期化処理
 ・リクエストの処理(補完
 ・ルーティング(何をどうするリクエストか判断
 ・ディスパッチ(Controllerをコール
Controller
 ・リクエストを詳細に分析
 ・Modelにパラメータを与えデータを取得
 ・リクエストに適したViewをコール
Model
 ・リクエストに依存せず要求されたデータを生成する
View
 ・データを整形し出力を決定

●パラメーターの$_GETはどこに書くのか?
直接のアクセスはフロントだけで十分。
●?action=configより処理が記事の更新だとの判断は
ルーティングに相当しますがconfigは設定の意味で使います。
●その他ファイルの読み込みはどこで行うのか?
ライブラリは使うときだけControllerやModelで指定します。
●modelsのclassをnewで宣言するのはどのファイルなのか?
インスタンスはControllerで生成します
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

front controller辺りも迷いがあったので参考にさせていただきます。

小規模・中規模システムとはいえ、
読み込み等に無駄が多かったので、
必要なものだけ厳選してもう少しスマートな記述を心がけたく思います。

お礼日時:2011/08/12 12:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!