サーチ…


前書き

ミドルウェアはクラスであり、1つまたは複数のルートに割り当てることができ、要求サイクルの初期段階または最終段階でアクションを実行するために使用されます。私たちは、HTTPリクエストが実行されている間に通過しなければならない一連のレイヤーと考えることができます

備考

「前」ミドルウェアは、コントローラアクションコードの前に実行されます。リクエストがアプリケーションによって処理された後に「After」ミドルウェアが実行される

ミドルウェアの定義

新しいミドルウェアを定義するには、ミドルウェアクラスを作成する必要があります。

class AuthenticationMiddleware
{
    //this method will execute when the middleware will be triggered
    public function handle ( $request, Closure $next )
    {
        if ( ! Auth::user() )
        {
            return redirect('login');
        }

        return $next($request);
    }
}

ミドルウェアをアプリケーションのすべてのルートにバインドする必要がある場合、ミドルウェアをapp/Http/Kernel.phpミドルウェアプロパティに追加する必要があります。

protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \App\Http\Middleware\AuthenticationMiddleware::class
];

ミドルウェアをいくつかのルートに関連付けるだけの場合は、 $routeMiddleware追加することができ$routeMiddleware

//register the middleware as a 'route middleware' giving it the name of 'custom_auth'
protected $routeMiddleware = [
    'custom_auth' => \App\Http\Middleware\AuthenticationMiddleware::class
];

これを次のように単一のルートにバインドします。

//bind the middleware to the admin_page route, so that it will be executed for that route
Route::get('admin_page', 'AdminController@index')->middleware('custom_auth');

前と後のミドルウェア

「前」のミドルウェアの例は、次のとおりです。

<?php

namespace App\Http\Middleware;

use Closure;

class BeforeMiddleware
{
    public function handle($request, Closure $next)
    {
        // Perform action

        return $next($request);
    }
}

「後」のミドルウェアは次のようになります。

<?php

namespace App\Http\Middleware;

use Closure;

class AfterMiddleware
{
    public function handle($request, Closure $next)
    {
        $response = $next($request);

        // Perform action

        return $response;
    }
}

主な違いは、 $requestパラメータの処理方法です。アクションが前に実行している場合は$next($request)コントローラのコードの前にどうなることが実行される呼び出し中に$next($request)最初のコントローラコードが実行された後に実行されたアクションにつながります。

ルートミドルウェア

登録されたミドルウェアrouteMiddlewareapp/Http/Kernel.phpルートに割り当てることができます。

ミドルウェアを割り当てる方法はいくつかありますが、すべて同じです。

Route::get('/admin', 'AdminController@index')->middleware('auth', 'admin');
Route::get('admin/profile', ['using' => 'AdminController@index', 'middleware' => 'auth']);
Route::get('admin/profile', ['using' => 'AdminController@index', 'middleware' => ['auth', 'admin']);

上記のすべての例では、経路ミドルウェアとして登録されていても、完全修飾クラス名をミドルウェアとして渡すことができます。

use App\Http\Middleware\CheckAdmin;
Route::get('/admin', 'AdminController@index')->middleware(CheckAdmin::class);


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow