![見出し画像](https://assets.st-note.com/production/uploads/images/133815018/rectangle_large_type_2_fc06778ffc025aff1888337cf7554eb2.png?width=1200)
Photo by
hamigakitanuki
Laravelのセッションブロッキングがroutesに記載しただけでは動作しなかった件
お疲れ様です。
セッションブロッキング
上記公式ドキュメントにあるように、
// routes/***.php
Route::post('/profile', function () {
// ...
})->block($lockSeconds = 10, $waitSeconds = 10)
Route::post('/order', function () {
// ...
})->block($lockSeconds = 10, $waitSeconds = 10)
->block() とメソッドチェーンするだけで動作するはずなんですが、動作しませんでした。
デバッグしたら、StartSessionミドルウェアで$request->route()が常にnullになってしまっていたため、該当の処理に辿り着いていなかったのです。
そこで調べたところ、以下の回答を発見。
app/Http/Kernel.phpに以下の設定を追加。
// app/Http/Kernel.php
protected $middlewareGroups = [
...
'api' => [
...
\Illuminate\Session\Middleware\StartSession::class, // add
],
];
App\Http\Kernel::$middlewareGroupsの設定が必要でした!
App\Http\Kernel::$middlewareだけではダメなんだそうです。
上記の回答内では、Kernel::$routeMiddleware に書けと書かれていますが、
それでは動作しませんでした。
グルーピングされている場合はmiddlewareGroupsに書くのかも?詳しくは調べていません。
ありがとうございました。