サーチ…
前書き
ミドルウェアはクラスであり、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)
最初のコントローラコードが実行された後に実行されたアクションにつながります。
ルートミドルウェア
登録されたミドルウェアrouteMiddleware
でapp/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