Laravelのミドルウェアにおける「Before(前処理)」と「After(後処理)」のコード構造の違いを解説します。
両者の最大の違いは、「コントローラーなどのメイン処理($next($request))を呼び出す前に自分の処理を書くか、呼んだ後に書くか」という点にあります。
1. Beforeミドルウェア(前処理)の構造
リクエストがアプリケーションのメイン処理に到達する前に実行されます。最もよく使われるパターンです。
PHP
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class EnsureTokenIsValid
{
/**
* 送信されてきたリクエストを処理する
*/
public function handle(Request $request, Closure $next): Response
{
// ---------------------------------------------------------
// 【ここに前処理を書く】
// ---------------------------------------------------------
// 例: トークンが不正なら、メイン処理に進ませずにリダイレクトする
if ($request->input('token') !== 'my-secret-token') {
return redirect('home');
}
// 条件をクリアしたら、次の処理(コントローラーなど)へリクエストを渡す
return $next($request);
}
}- ポイント:
$next($request)を呼び出す前に判定や加工を行います。もし条件に合わない場合は、ここでレスポンス(リダイレクトなど)を返して処理を中断させることができます。
2. Afterミドルウェア(後処理)の構造
コントローラーなどがリクエストを処理し、レスポンスを生成した後に実行されます。
PHP
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class LogResponseTime
{
/**
* 送信されてきたリクエストを処理する
*/
public function handle(Request $request, Closure $next): Response
{
// 1. 先に次の処理へリクエストを渡し、コントローラーが作ったレスポンスを受け取る
$response = $next($request);
// ---------------------------------------------------------
// 【ここに後処理を書く】
// ---------------------------------------------------------
// 例: 生成されたレスポンスのヘッダーにカスタム情報を追加する
$response->headers->set('X-App-Version', '1.0.0');
// 最後に、加工した(あるいはログを取り終えた)レスポンスをブラウザに返す
return $response;
}
}- ポイント: 先に
$response = $next($request);を実行して、背後の処理をすべて終わらせます。手元に戻ってきた$responseに対して、データの追加やログ出力などのアクションを行います。
🔄 構造の比較まとめ
違いをシンプルに並べると以下のようになります。
| 特徴 | Beforeミドルウェア(前処理) | Afterミドルウェア(後処理) |
| コードの基本形 | // 自分の処理return $next($request); | $response = $next($request);// 自分の処理return $response; |
| 主な目的 | アクセス制限、認証チェック、入力データの整形 | レンスポンスの加工(ヘッダー追加など)、ログ記録 |
| 処理の中断 | 可能(コントローラーを実行させずに弾く) | 不可(すでにコントローラーは実行済み) |
このように、return $next($request); を「最後に書くか」「最初に書くか」だけで、役割がガラリと変わるのがLaravelミドルウェアの面白いところです。備忘録のヒントとしてお役立てください!



コメント