Middlewareを学びます。Middlewareというと何を思い浮かべるでしょうか?
ミドルウェアはその名の通り、OSとアプリケーションの中間にあるソフトウェアという意味です。
フレームワークLaravelでのMiddlewareとはどういう意味でしょうか?そもそもLaravel自体はOSではなく、アプリケーションのソフトウェアです。そのフレームワークにミドルウェアという機能があるのは何か虎に睨まれたようです。では具体的に見ていきましょう。
まず、新規にプロジェクトを立ち上げます
$ php artisan make:auth
$ php artisan migrate
./app/Http/kernel.php
protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, ];
./app/Http/Middleware
Authenticate.php
EncryptCookies.php
RedirectIfAutenticated.php
VerifyCsrfToken.php
Authenticate.php
public function handle($request, Closure $next, $guard = null) { if (Auth::guard($guard)->guest()) { if ($request->ajax() || $request->wantsJson()) { return response('Unauthorized.', 401); } else { return redirect()->guest('login'); } } return $next($request); }
$ php artisan make:middleware RoleMiddleware
Middleware created successfully.
$ php artisan down
Kernel.php
protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'role'=>\App\Http\Middleware\RoleMiddleware::class, ];
Route
Route::get('/admin/user/roles', ['middleware'=>'role', function(){ return "Middleware role"; }]);
app/Http/Middleware/RoleMiddleware.php
public function handle($request, Closure $next) { return redirect('/'); return $next($request); }
/admin/user/roles にアクセスするとリダイレクトされます。