MVCモデル(CakePHP)の基礎知識整理


なんぞやについて
CakePHPベースで調べたもの

MVCモデルについて

プログラムの中身(処理)を機能ごとに分けて記述することで、プログラムを整理しやすくする考え方

  • モデル(Model):表示や入力に関連しない処理を担当
  • ビュー(View):表示や入力に関する処理を担当
  • コントローラ(Controller):ビューとモデルの橋渡し役を担当


1. ブラウザからコントローラーとアクションを指名され、アクションが実行される。
2. アクション内でモデルが指定されていればモデルが実行される。
3. アクションの処理が終了したら、Templateフォルダ¥コントローラーと同名のフォルダ¥アクション名と同名のctpファイルを表示対象として生成する。
4. ブラウザに返す。
(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と同じものを指す ↓

UserController.php
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"は大文字
・アクション名はキャメル式🐫

参考

  1. MVCモデルとは | 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
  2. 初めてCakePHPで開発するときに気をつけたいMVC〜 | Qiita
  3. MVCモデルについてわかりやすく解説します!【初心者向け】 | ウマロのゲームブログ

  1. 処理した結果をデータベースへ反映させること 

  2. DB名自体、基本は複数形だが単数形でも動作する 

  3. ~Controller.php内のメソッドのこと(多分) 

  4. Template/Userフォルダ:Controllerごとにフォルダが必要