【CakePHP3】処理の流れを把握しよう!MVCモデルを解説します




こんにちは、普段はCakePHPでウェブアプリケーションの開発をしています。CakePHPはPHPを使ったウェブフレームワークです。CakePHPはMVCモデルという構造で処理を行っていますが、触りたての頃はちんぷんかんぷんで、内部の処理が全くイメージできずに戸惑っていました。

そこで今回の記事では、CakePHPの重要概念であるMVCモデルを紹介することで処理の流れを把握できればと思います。

MVCモデルについて

ここではMVCのそれぞれについて簡単に説明します。

Model

Modelは主にデータベースとのやりとりで使用します。例えばデータベーステーブルのどのデータを引っ張ってくるかを決めたり、場合によってはControllerにデータを渡す際に整形を行ったりします。

Controller

ControllerはMVCモデルの中で最も中心的な役割を担うものです。その名の通り、ModelとViewに命令を送る役割があり、内部処理や具体的な計算はここで行われます。Modelからデータを引っ張ってきたり、Viewに変数を送ったりします。

View

Viewはテンプレートファイルを読み込んで、最終的なウェブページをレンダリングする箇所です。Cakephpの場合は.ctp(Cakephp Template)という独自の拡張子が付きますが、中身は通常のhtml+javascript+PHPで書くことが出来ます。Controllerから送られてきた変数をそのまま利用することが出来ます。

MVCモデルの流れ

MVCモデル概略図

ブラウザからURLでWebサーバにリクエストを送り(①)、レスポンス(⑦)が返ってくるまでこのような流れで処理が行われます。以下の例では、ドメインはhttps://keita-blog.comとして解説していきます。(※実際にURLを入力しても何も見れません)

①ブラウザ→Controller

ブラウザからURL(https://keita-blog.com/hoge)が叩かれてWebサーバにリクエストが送られると、src/Controllerの中のHogeController.phpを読み込みます。

②Controller→Model

もしデータベースを利用しない場合は②〜⑤が省略されます。この②はデータベースからモデルを取ってきてくれとModelに指示を行っています。

③Model→DB

モデルからデータベースにアクセスしてControllerに要求されたデータをリクエストします。

④DB→Model

③でModelにリクエストされたデータをレスポンスします。

⑤Model→Controller

ModelからControllerにデータを渡します。データを渡す前にModel側でデータ処理・データ整形を行うことがあります。もしくはControllerでデータの処理・整形を行うこともあります。

⑥Controller→View

ModelやControllerで処理を行った後、結果をViewに送ります。基本的には変数として渡します。また、Controller処理した結果をデータベースに送ることも出来ます。

⑦View→ブラウザ

⑥でControllerから送られてきた動的データと、元のViewファイル(○○.ctp)の静的データを結合してブラウザーにレスポンスを送ります。

まとめ

簡単ですが、MVCモデルの説明でした。なお、MVCのソースコードはsrcフォルダに格納されているのですが、ViewのテンプレートはTemplateフォルダに入っています。Viewフォルダは別のソースコードが入っているので混同しないようにしましょう。