質問: [まえおき] PHPでクラスで管理するための練習として、PHPでMVCの概念に基づいて、WEBサイトを作っています。サイト内の各ページは、URLにコントローラー名(クラス名)とそのアクション名(関数名)を指定することによって、ルートに配置したindex.phpで判定を行い、それに対応したviewを表示しています。viewにはsmartyを利用しています。 [質問] このような場合において、viewの共通部分についての質問ですが、共通部分について動的な処理をおこないたい場合は、どこに処理を書くのがベストなのでしょうか? 例えば、ブログサイトのサイドバーのようなものを例にすると、各カテゴリー別の記事やそれに対応した記事のカウント数やユーザー一覧や検索ボックスなどがあります。MVCのルールですと、コントローラーのどこかに処理を書かないとダメだと思うのですけど、全てのコントローラーに同じ内容を記載するのも非効率ですし、かといって、別の場所から共通部分の処理をインクルードしても、MVCの概念が壊れると思いますし、このあたりが悩みどころです。 共通部分に動的な処理がない場合に関しては、viewのtplファイルに共通部分をまとめたtplファイルをインクルードしたり、共通部分を記載した、confファイルを読み込むことで対処できるとおもいますが、ひょっとしたら、こっちの方でなんとか動的なことができないかとも考えましたが、もしできたとしても、Viewで動的な処理しているので、MVCの概念ではないかもしれないので微妙なところです。
回答: やり方はいろいろあると思いますが、コントローラの親クラスを作って そこのコンストラクタに書くのが一番簡単だと思いますよ。 あと、私が個人的によくやるのは、たいていのフレームワークは、URLをcontroller/actionとしますので、 その名前を動的に取得してファイルがあればIncludeするようにとか。これはテンプレートファイルにかぎらず、CSSやJavaScriptでもやりますね。