Laravelのライフサイクル #Laravel輪読会 Vol.1
2021/08/26
Table of Contents
チームLIGHTの紹介
チームLIGHTは現在エンジニア5名、デザイナー2名、インターン1名の合計8人のチームです。 チームLIGHTの雑記ブログもありますので、よかったらそちらもそうぞ! こちらは技術的な内容ではなく、メンバーの日常のことをつらつらと書いています。
また、不定期でLIGHT@NOONという配信イベントも開催しています。
Laravel輪読会の紹介
チームLIGHTでは、週に1回1時間、Laravel輪読会を実施しています。
輪読会で読む本はこちらの本です!
2021/6/1に発売されたばかりの本で、Laravel8にも対応しています。
ボリュームもたっぷりな上に、Laravelの設計やテストコードに関する内容も充実しているので、オススメです!
本題
今回読んだページはP.56 ~ P.63 の「2-1 ライフサイクル」についてです。
ライフサイクルについて
Laravelアプリケーションの実行の流れは
-
サーバー
-
エントリポイント
-
HTTPカーネル
-
ルータ
-
ミドルウェア
-
コントローラ
という順番で実行されます。
それぞれの動作に関して、書籍を読みながら、実際にLaravelのコードを読み進めました。
チームで話したこと
public/index.phpからLaravelの世界ははじまる
- public/index.phpからLaravelが起動し、レスポンスを送り、終了するまでの処理が発生する。
P.60に関して、Routeのコントローラーだけ書くと、__invokeは発火する。それしかやらない書き方もある。
-
routesの書き方として、「TaskController」のように、メソッドを指定しない場合、__invokeが発火する。
-
Controller内にメソッドを書かずに__invokeだけで実装する事例もある(Fusicではあまり聞かない)
P.62 コントローラでメソッドインジェクションは微妙かも?__construct()でnewしよう!
use App\Services\TaskService;
class TaskController extends Controller
{
public function getTask(Request $request, TaskService $service)
{
$tasks = $service->findTasks($request->get('is_done));
}
}
上記のように、「TaskService」をメソッドインジェクションでもってくるよりは
use App\Services\TaskService;
class TaskController extends Controller
{
private TaskService $service;
public function __construct(TaskService $service = null)
{
$this->service = $service ?? new TaskService();
}
public function getTask(Request $request)
{
$tasks = $this->service->findTasks($request->get('is_done));
}
}
の書き方の方が、各メソッドがごちゃごちゃしなくてよさそう。
routesの書き方、配列か@か問題
- Fusic内では@で書く人が圧倒的に多いイメージ。
routesの書き方、Appから書くと、変なとこから持ってきてる感。Controller名だけでよくない?
Route::post('/tasks', 'App\Http\Controllers\AddTaskAction');
に関して、「App\Http\Controllers」は余計な記述かも。
特殊なPATHの際に明示するだけでもよさそう。
routesでクロージャーを使うと、routeのキャッシュが効かなくなる
Routeの以下のような書き方。
Route::get('/hello', function (Request $request) {
return view('hello');
})
- この書き方をすると、routeのキャッシュが効かなくなってしまう。
- php artisan route:cacheを実行すると、以下のエラーが発生する。
Unable to prepare route \[...] for serialization. Uses Closure.
- 大規模アプリだとデプロイの度にroute:cacheした方がいいので、基本はクロージャーは使わない。
P.59に関して、RequestHandledをListenしたい時ってどういう時だろう?
- RequestHandled自体は何もしてなさそう
- 何かしらイベントが必要な時に使うのかも?
今日はこんな感じの輪読会でした!
次回はサービスコンテナをやります!
お楽しみに!