>  기사  >  PHP 프레임워크  >  ThinkPHP6의 다양한 미들웨어에 대해 이야기해 보겠습니다.

ThinkPHP6의 다양한 미들웨어에 대해 이야기해 보겠습니다.

王雪芹
王雪芹원래의
2020-05-06 17:18:082200검색

ThinkPHP6에는 새로운 미들웨어 기능이 있는데, 미들웨어는 여러 종류로 나누어져 있는데 ThinkPHP6 미들웨어에 대해 많은 초보자들이 어려움을 겪고 있습니다.

글로벌 미들웨어:

ThinkPHP6 프레임워크를 다운로드한 후 앱 디렉터리에 middleware.php가 있습니다. 우리가 앱 디렉터리에 정의한 미들웨어를 글로벌 미들웨어라고 합니다. 모든 응용 프로그램.

애플리케이션 미들웨어:

즉, middleware.php의 다른 복사본을 복사하여 인덱스 애플리케이션과 같은 애플리케이션 아래에 넣으면 애플리케이션 미들웨어라고 할까요?

컨트롤러 미들웨어:

미들웨어가 컨트롤러에서 동작한다면 컨트롤러 미들웨어라고 하나요?

라우팅 미들웨어:

라우팅에서도 미들웨어를 정의할 수 있나요? 예를 들어 특정 요청에만 특정 미들웨어를 사용하고 다른 요청에는 미들웨어를 사용하고 싶지 않습니다. 그게 전부입니다. .

동일한 요청에 대해 모든 유형의 미들웨어가 정의된 경우 실행 순서는 어떻게 되나요?

글로벌 미들웨어->애플리케이션 미들웨어->라우팅 미들웨어->컨트롤러 미들웨어

다음으로 예시를 살펴보겠습니다.

글로벌 미들웨어:

 public function handle($request, \Closure $next)
    {
        echo 'app全局中间件';
        return $next($request);
    }

애플리케이션 미들웨어:

public function handle($request, \Closure $next)
    {
        echo '应用中间件';
        return $next($request);
    }

라우팅 미들웨어:

Route::rule('hello','index/hello')
->middleware(\app\middleware\Auth::class);

컨트롤러 미들웨어:

컨트롤러 미들웨어를 사용하기 전에 먼저 루트 디렉터리에 별칭을 정의합니다. configmiddleware에서 별칭을 정의합니다. php.php. 이 별칭은 실제로 별칭 식별자를 추가하기 위한 것입니다. 별칭을 정의한 후에는 컨트롤러 미들웨어뿐만 아니라 라우팅 미들웨어에서도 사용할 수 있습니다.

return [
    'alias' => [
        'auth1' => app\middleware\Auth1::class,
    ],
];

여기에서 별칭 미들웨어를 정의하므로 middleware.php에서 선언할 필요가 없습니다. 대신 컨트롤에서 별칭 정의를 사용합니다.

class Index
{
    protected $middleware = ['auth1'];
    public function index()
    {
       return 'index';
    }
    public function hello()
    {
       echo 'hello方法';
    }
}

이때 hello 메소드에 액세스하고 출력 결과는 다음과 같습니다.

app global Middleware

Application middleware

Routing middleware

Controller middleware

hello method

위는 ThinkPHP6의 다양한 미들웨어에 대한 소개입니다. 사실 다양한 미들웨어는 그렇지 않습니다. 이해하기 어렵습니다. 왜냐하면 그들 사이의 실행 순서가 모든 사람에게 명확해야 하기 때문입니다.

위 내용은 ThinkPHP6의 다양한 미들웨어에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.