MVC構造に不慣れなものです。(zendフレームワークを利用しています)
コントローラAContololler.phpで、ビューA.htmlを表示しています。
ビューA.htmlの中では、共通のビューhead.htmlを最初に読み込んでいます。
コントローラB,Cでも同様にビューB,Cを表示し、共通のビューhead.htmlを最初に読み込んでいます。
このビューhead.htmlの中身を条件ごとに動的表示したいのです。
1個のコントローラ限定であれば、
コントローラ内で条件分けして結果をビューに渡してしまうだけなんですが、
複数のコントローラで呼ばれることを考えると、
それぞれのコントローラ内に同じ処理を書かなければなりません。
これを忘れてたまたまhead.htmlを読み込んでしまった時にエラーとなってしまいます。
ようするに、head.htmlを読み込む上で、コントローラ側に設定が必要という二手間かかる部分が腑に落ちません。
MVC構造でないのであれば、動的部分をhead.phpとして作っておき、
必要なページでそれを読み込むだけでいいのにって思ってしまいました。
この二手間かかるのを回避するには、
head.htmlの中で、動的データを取りにいくというajax化するしかないのでしょうか?
それともhead.htmlの中にphpのコード、ここでいえばDBに繋ぐ部分や条件分けなどまで書いてしまうのもありなんですか?
でもMVCの考え方としてビューの中に処理をだらだら書くのはちょっと筋違いかなぁと思うのですがどうなんでしょう。。。
No.2ベストアンサー
- 回答日時:
Zendは使ったことがないですが、
演算処理が発生するなら、Controllerから呼び出しているであろうModelで処理させたり、
または、Controllerに一つ継承クラス作ってそこに必要な振り分けメソッドを記述して、全てのControllerはそれを継承するように作れば良いのではないでしょうか。
MVCというよりかは、オブジェクト指向の利点を生かせてないように思います。
<?php
class IndexController extends Zend_Controller_Action{
}
?>
というものを作っているのであれば、
<?php
abstract class DefaultController extends Zend_Controller_Action{
public function テンプレート振り分けようの関数(){
//なんか処理
}
}
?>
というものを作ってやって、IndexControllerを
<?php
class IndexController extends DefaultController{
}
?>
と書き換えてやれば、継承元のメソッドが使えます。
大変、参考になりました!
基底コントローラを作成し、init内でビュー変数に値を持っておくという方法にしました。
ありがとうございました。
No.3
- 回答日時:
Layoutを使うのがいいかと思います。
このあたりが参考になるかと。(28.2. Zend_Layout クイックスタート)
Layoutを固定的に使う場合は、基底Controller(extends Zend_Controller_Action)を作成して、そこのpreDispatchでLayoutのファイル名を指定してあげるのが良いと思います。
あとは継承させて作業をすすめると、
思うような動作になるかと思います。
※Zend_Controller_ActionからpreDispatchを継承するときの注意
以下のようにしないと、ディスパッチされず、不可解な状態になりますのでご注意ください。
public function preDispatch()
{
$ret = parent::preDispatch();
// なんらかの処理
return $ret;
}
参考URL:http://framework.zend.com/manual/ja/zend.layout. …
Zend_Layout すごく参考になりました!
これを使えば、部品化したhtmlを、ビュースクリプト内でrequireするとかしなくてもいいんですね。
ただ、表示系はデザイナーさんがいじりやすくするため、システムと絡まない方法を探しています。
なので、基底コントローラで必ずビュー変数に値を持っておくという方法にしました。
ありがとうございました。
No.1
- 回答日時:
Ajaxに話が飛躍する前にテンプレートエンジンくらい使わないのは何故?
PHP自体がテンプレートエンジンのようなものだと思っていて
ビューの中で、$this->hoge で処理後の値は取得できますよね。
ajaxで後から取得しに行くといったことをしないのであれば、
事前にこの$this->hoge に値を持っている必要があり、
この処理を全てのコントローラで行っておかなければいけないんでしょうか?
もしかしたら共通のhead.htmlを読み込まない時もあると思うんです。
そういった場合に、コントローラで必ずこのための処理をしておくというのが腑に落ちないんです。
MVCでなければ(フレームワークでなければ)、
処理を入れておいた共通のhead.phpを作っておき、
それを呼ばれた時だけ処理が行われて無駄が無いと思うんです。
この点、MVCではこういうものだってことなんでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Web・クリエイティブ 【 3DCGソフト⠀MAYAについての質問 】 MAYAでビューからイメージプレーンを読み込むと、ビ 1 2023/07/09 02:50
- PHP php ログイン 1 2022/11/01 00:24
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- 据え置き型ゲーム機 PS4コントローラのリセット確認方法 1 2022/10/01 10:57
- その他(プログラミング・Web制作) pythonにおける単方向リストの実装について 4 2022/07/13 12:34
- PHP PHPプログラムの間違い 1 2022/10/06 14:33
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
centos6のlogにscript not foun...
-
正規表現を使い、URLで条件分岐...
-
連想配列を含むヒアドキュメン...
-
index.phpに入るには、どうすれ...
-
フォントの色を変えるには?
-
onedrive にexcelファイルをア...
-
Subversionのリポジトリの削除
-
ImageCreate関数が undefined f...
-
メールフォームのタイトルが文...
-
.phpと.incファイルの違いはな...
-
php 完了画面の送信メールのコ...
-
PHPのif文でその処理を途中で抜...
-
PHPsendmailにて送信元を変更
-
CSV出力にHTMLが入ってしまう
-
入力フォームの空白や改行を制...
-
現在位置より2つ上のディレク...
-
VB.NET 最下位のディレクトリ名...
-
VBSの「MsgBox」について
-
図に示す階層構造で,現在のデ...
-
MySQLのdatetime型の月日0を削...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正規表現を使い、URLで条件分岐...
-
includeでHTMLファイルを呼出し...
-
PHP file_get_contents 503 ser...
-
centos6のlogにscript not foun...
-
コードがそのまま表示される
-
階層が違う場合の絶対パス相対...
-
連想配列を含むヒアドキュメン...
-
htmlで自分自身を呼び出して整...
-
htaccessでphpとSSIを同時に動...
-
PHPを使用したパンくずリストに...
-
ロリポップでの.htaccess 設定
-
SSI される .inc ファイル内に ...
-
データの呼び出しができません
-
ASPソースコードをPHPソースコ...
-
文字化けで混乱中です...
-
php内 正規表現で特定文字を削...
-
phpの正規表現 置き換え
-
htmlの書き換え
-
html拡張子のままphpを使いたい
-
ヒアドキュメント内にはnumber_...
おすすめ情報