なんぞやについて
CakePHPベースで調べたもの
MVCモデルについて
プログラムの中身(処理)を機能ごとに分けて記述することで、プログラムを整理しやすくする考え方
- モデル(Model):表示や入力に関連しない処理を担当
- ビュー(View):表示や入力に関する処理を担当
- コントローラ(Controller):ビューとモデルの橋渡し役を担当
- ブラウザからコントローラーとアクションを指名され、アクションが実行される。
- アクション内でモデルが指定されていればモデルが実行される。
- アクションの処理が終了したら、Templateフォルダ¥コントローラーと同名のフォルダ¥アクション名と同名のctpファイルを表示対象として生成する。
- ブラウザに返す。
(https://qiita.com/tsuyuri104/items/72797ba4c8b3fe79149a)
それぞれの役割について
Model
ビジネスロジック1を担当する
ControllerからDB関連の仕事をもらって処理する人
(https://umaroidblog.com/what_mvcmodel)
■ フォルダ構成
Model
|-Entity(Table内のソースを動かす)
|-Table(CRUD処理や入力チェックを実装する)
|-Validation(カスタマイズしたかったらここにいれる。自分で作る)
View
実際に入力や設定を行う画面を表示する
コントローラーから渡されたDBのデータをHTMLで表示したり
拡張子が「.ctp」だけど、中身はHTML with PHP
→ 普通にHTMLファイルとして編集すればOK
■ フォルダ構成
フォルダ名注意(別用途でViewフォルダがある)
Template
|-Element(HTMLファイルをパーツごとに書き出すことができる)
|-Error(エラーの時に表示する画面)
|-Layout(全画面共通で表示したいことを設定するdefault.ctp)
(他省略)
Controller
Viewからリクエストを受け取り、Modelへのメッセージに変換
そして、レスポンスとして処理後の画面をViewに返す
普通にPHPを書くところ
命名規則
ファイル名やソース内での扱いも含め
Modelの名前
【Table】
(例)UsersTable.php
・DB名
+Table
.php2
・先頭とTableの"T"は大文字
・ファイル内のクラス名はファイル名同様にDB名+Table
だが、ControllerでTableを呼ぶときはDB名のみ
→ TableRegistry::get('Users');
・Table内のメソッドはキャメル式🐪
【Entity】
(例)User.php
・DB名
.php(単数形)
・大文字スタート
【Validation】
規定は特になし
Viewの名前
(例)index.ctp
・小文字スタート
・Template配下の命名規則は同じ
・対象のController.phpのアクション名3と同じものを指す ↓
class UserController extends Controller
{
public function index() {
・・・・・・
}
private function showList() {
・・・・・・
}
}
この場合、src/Template/User/
4配下に
・index.ctp
・show_list.ctp
(ここではスネーク式🐍になる)
が必要となる
※private
のアクションだった場合はファイルなし
→ ブラウザからリクエストされたときのアクションのみ必要なため
(そもそもprivate
だったらクラス外からアクセスできない)
Controllerの名前
(例)UserController.php
・コントローラ名
+Controller
.php
・先頭とControllerの"C"は大文字
・アクション名はキャメル式🐫
参考
- MVCモデルとは | 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
- 初めてCakePHPで開発するときに気をつけたいMVC〜 | Qiita
- MVCモデルについてわかりやすく解説します!【初心者向け】 | ウマロのゲームブログ