第2章
第2章 · 初心者向け

CakePHPとMVC

CakePHPは「役割分担の決まった型」です。全体像だけ先に掴みます。

1. CakePHPとは

CakePHP=PHPでWebアプリを速く・きれいに作るための道具一式

ログイン、画面表示、データベースアクセスなど、毎回ゼロから書かなくてよい仕組みが最初から入っています。

たとえ

素のPHPが「包丁だけ」、CakePHPが「キッチン一式のキッチンカー」です。ルール(置き場所)がある代わりに、迷いにくくなります。

2. MVCとは

MVC=仕事を3つに分ける考え方
  • Model(モデル)… データ係。DBの読み書き
  • View(ビュー)… 見た目係。HTMLを作る
  • Controller(コントローラ)… 受付係。流れを決める
レストランのたとえ

お客さん=ブラウザ。受付=Controller。厨房=Model。盛り付け・提供=View。

3. Model / View / Controllerの役割

役割の見分け方
  • DBを触る? → Model
  • HTMLを書く? → View
  • 「POSTが来たら保存して一覧へ戻す」など判断? → Controller
よくある失敗

全部をControllerに書くと、後で読めなくなります。まずは「受付は短く」を意識しましょう。

4. CakePHPのフォルダ構成

最初に覚える場所はこれだけで十分です。

src/Controller/   … 受付(Controller)
src/Model/Table/  … DB操作(Table)
src/Model/Entity/ … データ1件分
templates/        … 画面のHTML
config/routes.php … URLの対応表
バージョンについて

CakePHP 3/4/5でフォルダ名が少し違います。意味は同じなので、「Controller・Model・画面ファイルがある」と捉えればOKです。

5. URLから画面が表示されるまで

ブラウザ → URL解釈 → Controller →(必要ならModel)→ View → 画面
  1. 住所(URL)にアクセスする
  2. Routingが「どの受付の、どの係か」を決める
  3. Controllerのメソッド(Action)が動く
  4. データを View に渡し、HTMLが返る

6. Routingとは

Routing=URLと処理の対応表

たとえば /todos を開いたら TodosControllerindex を動かす、と決めます。

// /todos  →  TodosController::index()
慣例

何も書かなくても /コントローラ名/アクション名 で動くことが多いです。まずはこの形を覚えましょう。

7. ControllerとAction

Controller=受付クラス / Action=その中の1つの窓口(メソッド)
class TodosController extends AppController
{
    public function index()
    {
        // 一覧ページ用の窓口
    }
}

index がActionです。URLの最後の部分と名前が対応することが多いです。

8. CakePHPコードの基本的な読み方

迷ったらこの3問
  1. このURLはどの Action?
  2. データはどこで取っている?
  3. どの画面ファイルを出している?
Action名と、templates 内のファイル名がだいたい一致する

第2章 やってみよう

EXERCISE
  1. 自分のプロジェクトで Controller フォルダを開いてみる
  2. 既存のURLを1つ選び、「Controller名 / Action名」を書き出す
  3. MVCを、レストランのたとえで家族に説明してみる