質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

Q&A

解決済

4回答

5081閲覧

[PHP] MVCの共通部分の動的な処理はどこに書くのがベストなのか?

xjaPANDA

総合スコア124

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

0グッド

1クリップ

投稿2016/07/05 00:23

[まえおき]
PHPでクラスで管理するための練習として、PHPでMVCの概念に基づいて、WEBサイトを作っています。サイト内の各ページは、URLにコントローラー名(クラス名)とそのアクション名(関数名)を指定することによって、ルートに配置したindex.phpで判定を行い、それに対応したviewを表示しています。viewにはsmartyを利用しています。

[質問]
このような場合において、viewの共通部分についての質問ですが、共通部分について動的な処理をおこないたい場合は、どこに処理を書くのがベストなのでしょうか?

例えば、ブログサイトのサイドバーのようなものを例にすると、各カテゴリー別の記事やそれに対応した記事のカウント数やユーザー一覧や検索ボックスなどがあります。MVCのルールですと、コントローラーのどこかに処理を書かないとダメだと思うのですけど、全てのコントローラーに同じ内容を記載するのも非効率ですし、かといって、別の場所から共通部分の処理をインクルードしても、MVCの概念が壊れると思いますし、このあたりが悩みどころです。

共通部分に動的な処理がない場合に関しては、viewのtplファイルに共通部分をまとめたtplファイルをインクルードしたり、共通部分を記載した、confファイルを読み込むことで対処できるとおもいますが、ひょっとしたら、こっちの方でなんとか動的なことができないかとも考えましたが、もしできたとしても、Viewで動的な処理しているので、MVCの概念ではないかもしれないので微妙なところです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

フレームワークによりますが、大体のものにはHelperというのがあります。
私はここに色んな所で使いそうな部品の処理を書いて、Viewで呼び出すって感じです。

投稿2016/07/05 01:24

Yasha_Wedyue

総合スコア830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xjaPANDA

2016/07/14 14:58

ありがとうございます。ちょうど今、はじめてcakePHP3を勉強しています。自分でフレームワークをつくるよりも、いろいろな機能がついていて、かなり便利ですね。複雑すぎてどう動いているかまだまだ構造が見えてきませんがー。
guest

0

smartyを使っているのであれば、includeではなくinsertというタグがあるはずなので、そちらを使ってみてはどうでしょうか?insertを使えば再びphp側を呼べます。しかもviewをキャッシュonにしていても、insert部分はキャッシュされずに動的に動きます。
ただそこかしこでinsertを使うとコードの可読性が悪くなりがちなのでお気をつけを。

投稿2016/07/05 01:31

編集2016/07/05 01:35
kaji

総合スコア648

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xjaPANDA

2016/07/14 14:59

返信ありがとうございます。insertは知りませんでした。試してみます。
guest

0

ベストアンサー

やり方はいろいろあると思いますが、コントローラの親クラスを作って
そこのコンストラクタに書くのが一番簡単だと思いますよ。

あと、私が個人的によくやるのは、たいていのフレームワークは、URLをcontroller/actionとしますので、
その名前を動的に取得してファイルがあればIncludeするようにとか。これはテンプレートファイルにかぎらず、CSSやJavaScriptでもやりますね。

投稿2016/07/05 00:37

Mr_Roboto

総合スコア2208

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xjaPANDA

2016/07/05 01:22

ありがとうございます感謝です。とても参考になります。いろいろ試してはみますが、まずは、アドバイスどおりに、コンストラクタに書き込んでみます。
Mr_Roboto

2016/07/14 15:06

ベストアンサーありがとうございます ^^ (すっかり忘れてました) っていうか、私の回答でいいんですか?w とりあえず簡単というだけなので、機能が増えてきたらまたいい方法を考えてくださいね。 その時は、また質問をお待ちしております。
guest

0

PHPで提供されているフレームワークがいくつかあるので、それを参考にしてみてはいかがでしょうか?

投稿2016/07/05 00:36

KatsumiTanaka

総合スコア924

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xjaPANDA

2016/07/05 01:17

返信、ありがとうございます。まだフレームワークはさわり程度で、中身を全然勉強していないので、勉強していきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問