PHPのWebアプリケーションフレームワークのデファクトスタンダードになりつつある(?)Laravelを学ぶ機会があったため、概要を簡単にまとめてみました。
対象バージョン:Laravel 5.6
はじめに
開発環境のセットアップ
Laravel Homestead(Laravel開発に必要なミドルウェア等をパッケージしたVagrant Boxファイル)を使うと簡単に開発環境をセットアップできる。
Homestead.yaml
にIPアドレスなどの設定が記載されている。
LaravelでのMVCモデル
Ruby on Railsを模倣したモデル構造をしている。
Router --> Controller <--> Model <--> DB
<--> View
Laravelのディレクトリ構造
-
/routes/
- ルーティング設定ファイルを格納する。
-
/app/Http/Controllers/
- コントローラを格納する。
-
/app/
- モデルを格納する。
-
/database/migrations/
- データベースのマイグレーションファイルを格納する。
-
/resources/view/
- テンプレートファイルを格納する。
-
/public/
- Webに公開する静的ファイルを格納する。
リソースに対するCRUD操作画面を作成する流れ
artisanコマンドでモデル・コントローラの雛形を作成する
php artisan make:model {モデル名} -m -c -r
- -m:DBマイグレーションファイルを作成する。
- -c:コントローラを作成する。
- -r:コントローラにリソースメソッドを作成する。
データベーススキーマを定義する
- 雛形
/database/migrations/xxxx.php
のupメソッドにテーブル定義を記述する。 -
php artisan migrate
を実行してテーブル定義を反映する。
参考:https://readouble.com/laravel/5.6/ja/migrations.html
コントローラーを実装する
雛形 /app/Http/Controllers/xxx.php
の各メソッドを書き換えてモデル操作とビュー返却を行う。
- 雛形コントローラーにはCRUD操作で必要になる画面用のメソッドが定義されている。
- コントローラーメソッドではモデルクラスを使ってデータ操作を行い、ビューにデータを渡してレンダリングして返却する。
ビューを実装する
- コントローラーから渡されたデータをBladeテンプレート使ってHTML構造に埋め込む。
- CSRF対策には
@csrf
を記述することでCSRFトークンをhiddenフィールドに埋め込める。
ルーティングを設定する
/routes/web.php
にコントローラーメソッドへのルーティング設定を記載する。
-
Route::resource
を使うことでコントローラのリソースメソッドのルーティング設定が簡単にできる。
参考:https://readouble.com/laravel/5.6/ja/controllers.html#resource-controllers
(おまけ)データベースにダミーデータを追加する
Seederを作成してデータベースにダミーデータを投入(シーディング)する。
-
php artisan make:seeder {Seeder}
を実行して雛形を作成する。 - 雛形
/database/seeds/{Seeder}.php
を編集してダミーデータ作成コードを記述する。
参考:https://readouble.com/laravel/5.6/ja/seeding.html
その他補足
バリデーション
コントローラーにリクエストのバリデーション処理を以下の2通りの方法で記述できる。
-
Requestオブジェクトのvalidateメソッドを使う方法
- バリデーション違反時のエラーレスポンスを自動生成してくれる。
-
Validatorファサードを使ってバリデータを生成する方法
- バリデーション処理のみ実施してエラーレスポンスを自分で構築する。
エラー処理
ハンドリングされない例外に対する処理は app/Exceptions/Handler.php
に記述できる。
- reportメソッド:ログ出力や外部サービス(監視サービスなど)への通知を行う。
- renderメソッド:発生した例外に対するレスポンスを出力する。
ミドルウェア
ミドルウェアを使うことで、HTTPリクエストに対して、コントローラの処理の前後に処理を挟むことができる。認証やCSRF保護などコントローラーの共通処理をまとめるのに役立つ。
参考:https://readouble.com/laravel/5.6/ja/middleware.html
例:Laravel組み込みの auth.basic
ミドルウェアを使ってBasic認証を設定する。
Route::get('profile', function() {
// ...
})->middleware('auth.basic');