supermannerの落書き

基礎からおさらい。おさらいが何よりも大事なのです。ふわっとした知識、撲滅!

Laravelにおける, ExceptionとMiddlewareGroupの問題

とても長いことブログを書いていなかったのですが、久しぶりにググり力をためされるTipsを得たので、
他のものと合わせて記載しておこうかなと思います。
最近はLaravelを使うことが多いのでLaraveのことを書きたいと思います。

Exception/HandlerとAuthGuardUserについて

未だに最適解がわからない

背景

よくあるHeaderのグローバルナビにログイン状態を表示していたのですが、そこのログイン判定を

\Auth::guard('user')->check();

な感じで行っていました。そのため、404なrouteにアクセスしたり等の `Exceptions/Handler.php` でハンドリングされるエラーにかかった時、
全ユーザーが未ログイン状態の表示になってしまいました。。。。

方法1(ボツった方)

ググり力を駆使した結果Kernel.phpをいじれというのを見かけました。具体的には

$middlewareGroups = [
    'web' => [
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class
    ]
];

middlewareGroupsにいたこの2個を

$middleware = [
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class
]

もちろんすべてのHTTPリクエストに対して働くので, 取得できました。

問題

これ、私大きく勘違いしていたのですが、Laravelの標準で、webのmiddlewareGroupは設定されていたのですね。
確かに、セッションを使いたくないリクエストもあるかもしれません。。。。
指摘されるまで気づかず、Qiitaに投稿してしまった(現在は削除済み)
危険そうだなと思ったのでこの方法は取らないことに。

方法2

ということで結局、menu部分は非同期で取得することにしました。
大本が404でも、メニュー部分はきっちりrouting通過できるので....。

結局...

Exceptionに引っかかったときはそこで処理は一旦終わりだという方針なのでしょうか。
良い感じに処理順を指定Groupのみで変更できないんですかね。
いい方法があるよという方はぜひ教えていただきたいです...!!!!!

おまけ

久しぶりにQiitaも書きました(*´ω`*) マニュアル or コードをよく読まないとこういうしょうもないところにハマります。。。という自戒の念をこめて!
qiita.com