【cakePHP】複数のモデルを使用するページの表示方法

このQ&Aのポイント
  • cakePHPを使用して複数のモデルを1つのページに表示する方法について教えてください。
  • cakePHPでは通常1つのモデルにアクセスして、その中で他のモデルを呼び出しますが、複数のモデルを1つのページにまとめて表示する方法が分かりません。
  • MVCの考え方とは異なる部分があり、複数のモデルを1つのページに表示するための適切な方法を教えてください。
回答を見る
  • ベストアンサー

【cakePHP】複数のモデルを使用するページを表示するには。

【cakePHP】複数のモデルを使用するページを表示するには。 cakePHP でwebアプリケーションを作成しようとしています。 チュートリアルでブログなど作成し、ある程度概要はつかめました。 1つのモデルを表示、編集する方法は理解できました。 イメージが掴めないのが、以下の場合です。 サイトのトップページなどは、通常複数のモデルの内容が記載されると思います。 cakePHPを使用した場合、基本的に1つのモデルにアクセスして、その中で他のモデルを呼び出すことになるのでは無いかと予測しています。 この場合、MVCの考え方とは、違うものになってしまうと思います。 どのようにして、複数のモデル(例えば、ブログの投稿とスケジュール)を1つのページに表示するべきでしょうか。 ご教授いただけると幸いです。 ***************** ・PHPのバージョンは5.x ・cakePHPのバージョンは1.3.x

  • PHP
  • 回答数2
  • ありがとう数7

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>例えば毎回表示されるページナビゲーションや、ツリー部分など、 >すべてのページに含まれることになるので、MVCのモデル的にどうなのかと思っています。 どちらにせよ、一度のアクセスにより起動するControllerは一つで、ControllerからModelが呼び出されるので、特段問題ないかとおもいます。 基本的に、Modelは一つのテーブル(またはリレーションしているのであればModelないで複数所持)するものですので、全部のページで使用するテーブルがあるのであれば、全部のControllerに指定すれば良いと想います。 逆にテーブルとは関係ないロジックだけを詰め込む場合は、Model内で var $useTable = false; を指定してやればよいかと。 >あ、AppContrller の事前処理に追加しておけばよいのかもしれませんね。 >テンプレートの方もelementで別だししておけば。。 ページナビゲーションやツリーの表示にデータベースから情報を引っ張るということがないのであれば、 AppController内でbeforeFilterなどに配列なり何なりを追加してやるか、Componentでも作ってやれば良いと想います。

golgo-goo
質問者

お礼

なるほど。 ありがとうございました。 まずは、創り上げてみます。

その他の回答 (1)

回答No.1

class PagesController extends AppController{ var $uses('Post', 'Schedule'); function index(){ $posts = $this->Post->find('all'); $schedules = $this->Schedule->find('all'); $this->set('posts', $posts); $this->set('schedules', $schedules); } } といった感じでいいのではないでしょうか。 CakePHPのマニュアルにもひとつのコントローラで複数のModelを使用する方法は書いてあるはずです。

golgo-goo
質問者

補足

ご回答ありがとうございます。 この方法は、マニュアルにもあり知っているのですが、 例えば毎回表示されるページナビゲーションや、ツリー部分など、 すべてのページに含まれることになるので、MVCのモデル的にどうなのかと思っています。 あ、AppContrller の事前処理に追加しておけばよいのかもしれませんね。 テンプレートの方もelementで別だししておけば。。

関連するQ&A

  • CakePHPで知ってると便利なもの

    CakePHPでブログをつくるチュートリアルを通して大体の流れをつかめるようになりました。 結構気に入っているのでガッツリ使っていきたいと思います。 そこで、CakePHPにデフォルトで備わってる機能として便利なものがあれば教えて下さい。 「こういう機能だけどこういう使い方もできる」というものでも構いません。 例えば appフォルダを複製して好きな名前をつけることで複数のアプリをもつことができるとか、 管理画面用にadmin用の設定が備わっているなど、どんなことでもよいです。 よろしくお願いします。

    • 締切済み
    • PHP
  • cakephpでテンポラリテーブル

    お世話になります。ご助力頂ければ幸いで御座います。 ---------------------------- PHP Version 5.6.14 cakephp 2.5系 mariadb-10.0.21-with-mroonga-5.08-winx64 ---------------------------- cakephpで以下の事がやりたいです。 (1)select文を使用してデータの抽出 (2)(1)を利用してテンポラリテーブルを作成。 (3)web上で検索結果を表示。 ※ページングを行いたのでcakePHPでページネーションを使用したいです。 (4)次ページやソート変更の際にはテンポラリテーブルからselect。 cakephpでテンポラリテーブルを作成、使用する場合のやり方がわからず、 頓挫しております。 お手数をお掛け致しますが、 何かご指摘点でも構いませんので、ご回答頂ければ幸いで御座います。

    • ベストアンサー
    • PHP
  • CakePHPのfindAllByの使い方

    先週からCakePHPの勉強を始めました。公式ドキュメントを見ながら少しずつ試しています。今はfindAllByを試しているのですが、サンプルどおりに記述してもうまく動きません。使用してるCakePHPのバージョンはほぼ最新の2.5.5です。 データを取得する — CakePHP Cookbook 2.x ドキュメント http://book.cakephp.org/2.0/ja/models/retrieving-your-data.html#findallby ◎findAllBy<x> サンプル # $this->User->findAllByEmailOrUsername('jhon'); と書くと ◎対応するSQL # User.email = 'jhon' OR User.username = 'jhon'; となると書いてあります。しかしこうはならず # User.email = 'jhon' OR User.username = null; というSQLになってしまい、当然検索結果も期待する結果になりませんでした。 試行錯誤した結果 # $this->User->findAllByEmailOrUsername('jhon', 'jhon'); と書けば、公式ドキュメントに書いてあるとおりのSQLが作成され、検索結果も期待する結果になりました。 プログラムの内容としては、ほぼブログチュートリアルと同じでそこに検索方法だけ変えただけです。すなわち「find('all')」から「findAllByEmailOrUsername('jhon')」などのように。 findAllByについて ・公式ドキュメントが間違っているのでしょうか? ・バージョンによって挙動が異なるのでしょうか? ・私の使い方や設定が間違っているのでしょうか?  というか、何かの設定によって使い方を変えることができるのでしょうか? この点について教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 【ASP.NET MVC】モデルの作り方

    ASP.NET MVCでのモデルについて、皆様はどのように作成しておられますか? ASP.NET MVCで何本かWebシステムを構築して、いまだに試行錯誤です。 サンプル例を見ても、実際とはかけ離れた簡単な内容で、あまり参考になりません。 自分が見たいくつかのサイトではこのように書いてありました。 ドメインモデル データベースと1:1で存在する入出力用のモデル。EntityFrameworkで定義する。 拡張ドメインモデル ドメインモデルにプロパティを追加したり、複数のモデルを使いやすくまとめたモデル。 ビューモデル 画面表示するためのモデル。 フォームモデル フォーム入力値を受信するためのモデル。 理屈はわかるのですが、このように4種類もモデルを定義するものなのでしょうか? モデル間のデータのやりとりも大変ですし、定義だけで作業量が半端ない感じです。 継承などをうまく使って省力化する方法とかありますか? 皆さまの方法論をお聞きしたくお願い申し上げます。 ASP.NET MVCに限らず、CakePHPなどの例でも歓迎です。

  • cakephpのデフォルトのページ設定

    cakephp初心者です。 色々なサイトのインストール手順を見て、 apacheでドキュメントルートを設定した、 /var/www/html/cakephpとして、cakephpのファイルを配置しました。 ブラウザからアクセスすると http://localhost/cakephp/自分の作成したディレクトリ というアクセス方法になります。 今は自宅の仮想サーバに入れていますが、もし外部のサーバに入れてドメイン名がついた場合、 http://ドメイン名/cakephp になってしまいますよね? http://ドメイン名 で、/var/www/html/cakephpにアクセスできるようにするには、 どのようにしたらいいのでしょうか。 現在、 http://ドメイン名 を打つと、cakephpのデフォルトの Release Notes for CakePHP 2.5.8. がタイトルのページが表示されています。 ここをデフォルトのページではなく、こちらで用意したViewのctpファイルを表示させてControllerで制御したいのです。

    • 締切済み
    • PHP
  • cakePHP 同じmodelで、ページによって異なるvalidateをしたい

    同じmodelで入力フォームが複数があります。 あるフォームは細かく必須項目をチェックするんですが、 あるフォームでは未入力でも通すようにしたいんです。 このような場合、valiateのセットを複数持つとか、 チェックをスルーさせるとかする方法はあるんでしょうか? バージョンは1.2です。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • cakephp2.5のフォームデータの受け渡し

    CakePHP2.5でフォームからpostでデータをコントローラで受け取って 別のページで表示するにはどうすればいいでしょうか フレームワークを使用しない普通のPHPならば以下のようになります。 $_POST('paramater'); ただ、CakePHPの場合だとどのようにしていいか不明です。 調べた結果以下のものが出てきたのですが 今回はモデルを使用しないでデータを受渡ししようと思っています。 $this->request->data['model']['field']; モデルを利用しないでデータの受け渡しをする方法をお教えください。 なかなかいい参考資料も出てきません

    • 締切済み
    • PHP
  • RailsのMVCモデルに関しての基本的な質問

    お世話になります、Railsに関して一通り入門書を読んだのですが、MVCモデルに関してご教示頂きたいのですが、現状LinusサーバにRubyGemがインストールされているので、WEBのトップページにも活用しようと考えているのですが、基本的な質問で恐縮なのですが、そもそも、MVCモデルは外部からのイベント(通常はユーザ入力)を受け取り、モデルとやり取りし、適切なビューをユーザに表示するというのが基本的な動作かと思いますが、その外部からのイベントがない静的なWEBページを作成する場合は、特にコントローラを作成する必要はないと考えて良いのでしょうか。 現状、spinelzと部分テンプレートのWEBページ作成を検討しています。データベース等はもちろん使用しません。

  • CakePHPのバリデーションエラー表示について

    CakePHPの入力フォーム作成中で、バリデーションエラーがあった場合、{$form->error('')}で各項目部分にエラーを表示させています。 しかし入力項目が多いため、ページ下部でエラーが発生しても、エラーが起きているのかどうかひと目では分かりません。 1つでもバリデーションエラーがあったとき、ページ上部にエラーメッセージ表示をするにはどうすればよいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • cakePHPを自分の現状ではいかに学ぶべきか?

    PHPは、オブジェクト指向以外はひと通りわかります。 オブジェクト指向は見たり少しいじったりという程度でしたらわかりますが、1から作ることはきついレベルです。 で、cakePHP2.xを勉強しはじめているのですが、CookBook(日本語版)を読んでCookBookにあるとおりのブログをつくるところまではできました。 ですが、CakePHPの概要の次(コントローラ)以降になって、急に、かなり理解するのに時間がかかっています。 MVC自体については、昔Smartyを個人的に使っていたので、Smartyでウェブ構築ができる程度にはわかります。 が、cakaやzendのようながっしりしたフレームワークに取り組むのはこれがはじめてです。 (PHP以外にも) このような状態なのですが、このままCookbookを進めていくよりも、効率的な方法はありますでしょうか? 現状だと、Cookbookでわからない部分を毎回毎回ぐぐって、相当時間がかかっています。 本にたよろうかとも思ったのですが CakePHP2 実践入門 (WEB+DB PRESS plus) [単行本(ソフトカバー)] http://www.amazon.co.jp/dp/4774153249/ Webアプリ開発を加速する CakePHP2定番レシピ119 [単行本] http://www.amazon.co.jp/dp/4798039519/ が定番っぽいですが、 ユーザレビューを読むと、評価がわかれていて、 こういう状況の自分にとってどうなのか迷ってしまいます。 今後どのように学んでいったらいいでしょうか? とりあえずcookbookをざっと、理解できなくてもざーっと読んでしまい、 「定番レシピ119」にのっとって組んでみて、Cookbookに戻る。。。。というのはどうでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう