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

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

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

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

PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

3回答

5977閲覧

CakePHPでのコントローラの分け方

退会済みユーザー

退会済みユーザー

総合スコア0

MVC

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

PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

1クリップ

投稿2015/08/04 02:07

CakePHPでアプリケーションを作成するとき、全体として統一されたインタフェースや連続した遷移があるのにモデルが異なるものを扱うとき、皆様はコントローラ(およびビュー)の分け方をどうされていますか?

例えば住宅に関する会員制サイトで、モデルがHouse(住宅)・Maker(業者)・User(システムユーザ)だとします。このシステム上で住宅に関する編集等をする場合、HouseモデルをHouseControllerで操作しますよね。

このとき、MakerやUserを編集する場合はどうしますか?特に住宅編集画面から業者編集やユーザ登録へいったん寄り道するような流れを想定した時に。

やっぱりMakerControllerやUserControllerへ飛ばしますか?それとも、HouseControllerの中で処理してしまいますか?

自分としては、全体としてひとつのフローの中の個々の画面にすぎないのに、おまけに見栄え(Layout)もひとつのものであるのに、コントローラが異なるというのは、あたかも複数のアプリに同じ見栄えを割り当ててくっつけているような違和感を感じるのです。

ということで、なにが正解かというより、皆様はどうされているのかな?と思い質問させていただく次第です。

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

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

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

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

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

guest

回答3

0

コントローラとモデルは必ずしも対になっている必要はありません。
MakerController
UserController
HouseController
の3個を作成したならば、
これに追加してCostomerControllerを作成し、UserとHouseを扱うなども出来ます。
コントローラは用途毎にいくつ作成しても大丈夫です。
どのモデルも扱わない BlankController と言うのでも問題ありません。
ページを増やす感覚で用途毎にどんどんコントローラを作成してもいいでしょう。

市販されている本には モデル、コントローラ、ビューを対で作成する例が多いので誤解が生じやすいですが、MVCの使い分けルール内で自由にコーディングできますし、問題ありません。

必ずしも以下の3個が必要でもありません。無くても構いません。
MakerController
UserController
HouseController
例えば、全てを1個で処理したい場合は
GrandControllerを作成しても構いません。

私はコントローラをページを作成するがごとく複数作成する方が、後々メンテナンスがやりやすいと感じます。
もちろん共通ファンクションはコンポーネントや、AppControllerをうまく使用します。

投稿2015/08/04 02:53

編集2015/08/04 02:58
rik

総合スコア1151

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

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

0

ひとつのコントローラの中で複数ページのコーディングが可能です。
私は1つのコントローラで済ます場合もありますし、ページごとにコントローラを分ける場合もあります。
規模感ですね。

わずか10ページ程度とかなら1つのコントローラで構わないように私としては思います。コントローラを分けるのはむしろ機能によって分けるというのが一般的ではないでしょうか。

投稿2015/10/17 19:55

tixure55

総合スコア400

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

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

0

これはいろいろ考え方があるかと思います。

ただ、モデル名とコントローラー名を絶対同じにしなければならないということはないですし、一連のページ遷移の中であちこちのコントローラーにアクションが分散しているのはメンテナンス上あまり良くないと私は思うので、1つのコントローラーにまとめて書くことが多いです。

また、コントローラー名がURLの一部になりますが、必ずしもモデル名と合わせる必要もないと思います。
(要求仕様で決められている場合もありますし、やたら長いテーブル名にしてしまった場合に困ります。)

ケースバイケースだと思います。

投稿2016/05/13 17:50

CodeLab

総合スコア1939

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問