###### tags: `ready for review` # MVCの全体像を把握する Laravelアプリケーションの全体像を把握するためには、 MVCの役割を正しく認識することが重要です。 この章では、M(モデル)、V(ビュー)、C(コントローラー)がどのような役割を持ち、 お互いどのような関係にあるかを学習していきます。 また、このMVCはLaravel特有のものではないので、MVCの処理の流れを理解するだけでも 他のフレームワークの大枠を理解することに相当します。 はじめのうちは難しいと思いますが、まずはイメージを持てるように頑張りましょう! ## Model(モデル) PHPとデータベースでやり取りする時、PDOを利用する方法を紹介ました。 PDOでも十分にデータベースを操作できるのですが、PHPとSQL、2つの言語が同じファイル内に混在してしまうため、 読みづらくなってしまいます。 ![pdo](https://i.imgur.com/CYEDStj.png) しかし、モデルはSQLを書くことなくPHPの文法だけで、データベースを操作することができます。 (SQLを書いて操作することも可能です) ![model](https://i.imgur.com/tIjZpLp.png) 他にも、データベースから取得したデータをプログラムで扱いやすい形式でデータを変換するというような役割もありますが、 まずは、SQLを書かなくてもデータベースを操作できるというイメージを持っておきましょう。 ## View(ビュー) サイトは静的と動的というジャンルに分けることができます。 静的サイトは、誰がそのサイトを訪れても同じ内容を表示するサイトのことをいいます。 CSSやJavaScriptによるアニメーションがあっても万人に同じ内容が表示されるサイトであれば、 そのサイトは静的なので注意してください。 動的サイトは、サイト利用者によって表示内容が異なるサイトのことをいいます。 TwitterやFacebookは利用者によって表示される内容が異なるサイトは動的といえます。 ビューはサイトの見た目を動的に変更することができます。 (静的サイトの見た目も作れますがメリットがないです) ![view](https://i.imgur.com/8S3u73c.png) ## Controller(コントローラー) コントローラーは名前の通り、何かをコントロールします。 その「何か」に該当するのが、「View(ビュー)」と「Model(モデル)」です。 まずは図を見て処理の流れの大枠を捉えましょう。 ![controller](https://i.imgur.com/iK0yPls.png) コントローラーは「ビューだけを操作する場合」と「ビューとモデルの両方を操作する場合」の2パターンあります。 このパターンを理解するだけでMVCを実装するとき非常に楽になるので、処理の流れをすぐに思い出せるようにしっかりとイメージを掴みしましょう! ### ビューだけを操作する場合 コントローラー内のcreateメソッドを動かすリクエストが来た際の処理の流れを見てみます。 createメソッドはビューを表示するだけの処理しかないので、そのままAというビューを表示して処理は終了します。 ### モデルとビューを操作する場合 コントローラー内のindexメソッドを動かすリクエストが来た際の処理の流れを見てみます。 indexメソッドはまず、モデルを介してDBから値を取得します。 その取得した値とビューを表示する処理を実行することで、Bというビューに取得した値を表示することができます。 ## 次の章へ行く前に Webフレームワークに触れたことのない方はMVCが非常に難しく感じたのではないでしょうか? 難しくて逃げたくなるかもしれませんが、MVCの大枠を理解しておくと他のWebフレームワークを利用することになった時、 理解スピードが段違い早くなるので少しずつイメージできるように頑張りましょう!