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