STAFFブログ

岡田州平の「初心者が知っておくと得をする押さえておくべきlaravelの特徴~第2回:laravelの構造編~」(Staff Blog)

皆さんこんにちは岡田です。今回はlaravelの構造についてブログを書いていきたいと思います。以前の投稿でlaravelはPHPのMVCフレームワークであることをお伝えしました。今回はMVCのフレームワーク構造について詳しくお話していきたいと思います。フレームワークを使ったことがある人には共感してくれると思うのですが、どこに探しているコードがあるのか、そしてコードが見やすくなったことに感動します。さらに、普通にフレームワークを使わずにPHPを書くよりも使った方がセキュリティー的にもよいのでは?と思ってしまうほど素晴らしいです。ぜひフレームワーク構造を理解して活用してください。

■laravelの構造

Laravelの構造を理解する上で大切なのが、MVC(M:model、V:view、C:controller)モデルがそれぞれどんな役割をしているのかを知ることです。簡単に説明しますと、ModelではDBの情報を取得し、ControllerではModelとのアクセスや処理を書き、それをViewに反映させます。

  • modelについて

modelはデータベース(DB)の処理を担当する部分になります。DBに接続して、取得したデータをControllerに渡す役割をしています。Laravelにはartisanコマンドがあり、それを使えば簡単にmodelのひな形を作ってくれます。作り方としては、「php artisan make:model モデル名」です。DBに複数形、モデル名は単数形にすることにより、自動でDBとつなげてくれます。

Modelからデータを取得する際の主な機能としては、DBクラス(クエリビルダ)とEloquent(ORM)を使うやり方があります。

・DBクラスについて

DBを利用するにあたって最も簡単なのが、DBクラスを使うことです。DBクラスはSQL文を書いたことがある人にとっては、非常に使いやすいと思います。簡単な例としては、Controller内に「$data = DB::select (‘select * from カラム名’);」を記述します。これにより、カラム名の情報を変数$dataに格納することができます。

・Eloquent(ORM)について

Laravelには「Eloquent」と呼ばれるORM(Object-Relational Mapping)が内蔵されています。PHPはオブジェクト指向で、DBはSQL文なので、互換性がありません。それを自動的に互換性があるように変換してくれるのがORMです。つまり、SQL文を書かずにデータを取得することができます。簡単な例としては、「$data = モデルクラス::all();」で全レコードを$dataに格納することができます。

  • Controllerについて

全体の制御を担当する部分になります。ModelとViewを用いて、表示画面を生成します。複雑なコードもControllerで記述することができます。例としては、以下のコードです。

「$view = view(‘example’, [‘model’ => $model])」の第一引数はテンプレートで、第2引数は連想配列になります。モデルクラスであるExampleModelの全レコードを$modelに格納して、テンプレートであるexampleに$modelを連想配列として渡し、「return $view」でViewに返しています。

  • Viewについて

Viewの役割は画面表示を担当することです。よく使われるのが、「Blade」テンプレートです。Htmlに変数を入れたいと思ったら、phpを書く必要があります。その時「<?php ~ ?>」を記述する必要があります。しかし、Bladeなら、それを省くことができます。

「{{値、変数など}}」を書くだけで使用することができます。なので、非常に見やすいコードを書くことができます。例としては、以下のように記述します。

Laravelを使って、何かWebサービスを作りたいと思ったときにMVCモデルを理解することは大切です。また、MVCモデルを採用しているフレームワークはたくさんありますので、Laravelを勉強することにより、他のフレームワークを理解する手助けにもなると考えています。ぜひ、このブログが皆さんの勉強の役に立てばと思います。

■最後に

2020年5月16日(土)名古屋市立中小企業振興会館にてOSC 2020 Nagoyaで、セミナーを開くことになりました。今回は私ではないですが、当社の滝澤が登壇します。詳細に関しては、後日ブログにて報告いたします。ご興味を持たれましたら、ぜひお越しください。

https://www.ospn.jp/osc2020-nagoya/

関連記事一覧