즉, 사용자(Laravel 뷰)가 서버(Laravel 컨트롤러)에 요청을 하면 해당 요청이 미들웨어를 거치게 됩니다. 이 방법으로 미들웨어는 요청이 인증되었는지 여부를 확인할 수 있습니다.
라라벨은 다음을 허용합니다 defi완료하고 추가 미들웨어를 사용하여 인증을 제외한 다양한 작업을 수행합니다.
인증 및 CSRF 보호와 같은 Laravel 미들웨어는 디렉토리에 있습니다. 앱/Http/미들웨어 .
따라서 미들웨어는 조건을 확인하고 작업을 수행할 수 있는 http 요청 필터라고 할 수 있습니다.
새 미들웨어를 생성하기 위해 다음 명령을 실행합니다.
php artisan make:middleware <name-of-middleware>
우리는 middleware
그리고 우리는 그것을 호출 CheckAge
, artisan
다음과 같이 답변해 드립니다.
위의 창은 "라는 이름으로 미들웨어가 성공적으로 생성되었음을 보여줍니다. 체크 에이지 ".
CheckAge 미들웨어 생성 여부를 확인하려면 app/Http/Middleware 폴더의 프로젝트로 이동하면 새로 생성된 파일을 볼 수 있습니다.
새로 생성된 파일에는 다음 코드가 있습니다.
<?php
namespace App\Http\Middleware;
use Closure;
class CheckAge
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return $next($request);
}
}
미들웨어를 사용하려면 미들웨어를 등록해야 합니다.
Laravel에는 두 가지 유형의 미들웨어가 있습니다.
Middleware globale
Route Middleware
Il 글로벌 미들웨어 애플리케이션의 모든 HTTP 요청에서 실행되는 반면 라우트 미들웨어 특정 경로에 할당됩니다. 미들웨어는 다음에서 등록할 수 있습니다. 앱/Http/Kernel.php. 이 파일에는 두 가지 속성이 포함되어 있습니다. $미들웨어 e $route미들웨어 . $middleware 속성 글로벌 미들웨어 및 소유권을 등록하는 데 사용됩니다. $route미들웨어 경로별 미들웨어를 등록하는 데 사용됩니다.
글로벌 미들웨어를 등록하려면 $middleware 속성 끝에 클래스를 나열합니다.
protected $middleware = [
\App\Http\Middleware\TrustProxies::class,
\App\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];
경로별 미들웨어를 등록하려면 $routeMiddleware 속성에 키와 값을 추가합니다.
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];
우리는 만들었습니다 체크 에이지 이전 예에서. 이제 이를 미들웨어 경로 속성에 등록할 수 있습니다. 이러한 등록을 위한 코드는 다음과 같습니다.
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'Age' => \App\Http\Middleware\CheckAge::class,
];
미들웨어로 매개변수를 전달할 수도 있습니다.
예를 들어 애플리케이션에 사용자, 관리자, 최고 관리자 등과 같은 다른 역할이 있는 경우 역할을 기반으로 작업을 인증하려는 경우 미들웨어와 함께 매개 변수를 전달하여 수행할 수 있습니다.
우리가 만든 미들웨어에는 다음과 같은 함수가 포함되어 있으며 인수 뒤에 사용자 지정 인수를 전달할 수 있습니다. $다음 .
public function handle($request, Closure $next)
{
return $next($request);
}
이제 처음부터 생성할 새 미들웨어에 역할 매개변수를 설정하고 다음 명령을 실행하여 역할 미들웨어 생성을 진행해 보겠습니다.
핸들 메소드를 다음과 같이 수정합니다.
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
매개변수를 추가했습니다. $role
, 메소드 내부에 라인 echo
역할의 이름을 출력에 씁니다.
이제 특정 경로에 대한 RoleMiddleware 미들웨어를 등록하겠습니다.
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'Age' => \App\Http\Middleware\CheckAge::class,
'Role' => \App\Http\Middleware\RoleMiddleware::class,
];
이제 매개변수로 미들웨어를 테스트하려면 요청과 응답을 생성해야 합니다. 응답을 시뮬레이트하기 위해 TestController를 호출할 컨트롤러를 생성해 보겠습니다.
php artisan make:controller TestController --plain
방금 실행한 명령은 폴더 안에 새 컨트롤러를 생성합니다. app/Http/TestController.php
, 방법을 변경 index
라인으로 echo "<br>Test Controller.";
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class TestController extends Controller {
public function index() {
echo "<br>Test Controller.";
}
}
응답을 설정한 후 파일을 편집하여 요청을 작성합니다. routes.php
추가하여 route role
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
이 시점에서 URL을 방문하여 예제를 시도할 수 있습니다. http://localhost:8000/role
브라우저에서 우리는 두 가지를 볼 수 있습니다 echo
Role editor
Test Controller
Il terminable Middleware
응답이 브라우저로 전송된 후 일부 작업을 수행합니다. 이는 메소드를 사용하여 미들웨어를 작성하여 달성할 수 있습니다. 미들웨어에서 종료합니다. Il terminable Middleware
에 등록해야 합니다. middleware
글로벌. 방법 terminate
두 개의 인수를 받게 됩니다 $ request e $응답.
방법 Terminate
다음 코드와 같이 생성되어야 합니다.
php artisan make:middleware TerminateMiddleware
미들웨어가 생성되면 app/Http/Middleware/TerminateMiddleware.php
다음과 같이 코드를 수정하자
<?php
namespace App\Http\Middleware;
use Closure;
class TerminateMiddleware {
public function handle($request, Closure $next) {
echo "Executing statements of handle method of TerminateMiddleware.";
return $next($request);
}
public function terminate($request, $response) {
echo "<br>Executing statements of terminate method of TerminateMiddleware.";
}
}
이 경우 우리는 방법이 있습니다 handle
그리고 방법 terminate
두 개의 매개변수로 $request
e $response
.
이제 미들웨어를 등록합시다.
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'Age' => \App\Http\Middleware\CheckAge::class,
'Role' => \App\Http\Middleware\RoleMiddleware::class,
'terminate' => \App\Http\Middleware\TerminateMiddleware::class,
];
이제 응답을 시뮬레이션하기 위해 컨트롤러를 만들어야 합니다.
php artisan make:controller XYZController --plain
클래스 내용 수정
class XYZController extends Controller {
public function index() {
echo "<br>XYZ Controller.";
}
}
이제 파일을 수정해야 합니다. routes/web.php
요청을 활성화하는 데 필요한 경로 추가
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'XYZController@index',
]);
이 시점에서 URL을 방문하여 예제를 시도할 수 있습니다. http://localhost:8000/terminate
브라우저에서 다음 줄이 표시됩니다.
Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware
Ercole Palmeri
당신은 또한 좋아할지도 모릅니다 :
색칠을 통해 소근육 운동 능력을 키우면 아이들이 글쓰기와 같은 보다 복잡한 기술을 준비할 수 있습니다. 색칠하다…
지난 월요일, Financial Times는 OpenAI와의 계약을 발표했습니다. FT는 세계적 수준의 저널리즘에 라이선스를 부여합니다…
수백만 명의 사람들이 스트리밍 서비스 비용을 지불하고 월간 구독료를 지불합니다. 당신은…