수색…


소개

미들웨어는 클래스이며 하나 이상의 라우트에 할당 될 수 있으며 요청주기의 초기 또는 최종 단계에서 조치를 취하는 데 사용됩니다. 우리는 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 추가 할 수 있습니다

//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) 에 작업이 수행되면 컨트롤러 코드가 실행 된 후 수행되는 작업으로 연결됩니다.

경로 미들웨어

app/Http/Kernel.php routeMiddleware 에서 routeMiddleware 로 등록 된 미들웨어는 경로에 할당 할 수 있습니다.

미들웨어를 할당하는 몇 가지 다른 방법이 있지만 모두 동일합니다.

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