>  기사  >  PHP 프레임워크  >  ThinkPHP6에서 요청 처리를 위해 미들웨어를 사용하는 방법은 무엇입니까?

ThinkPHP6에서 요청 처리를 위해 미들웨어를 사용하는 방법은 무엇입니까?

WBOY
WBOY원래의
2023-06-12 12:25:402424검색

ThinkPHP6에서 미들웨어는 일반적으로 사용되는 요청 처리 도구입니다. 미들웨어를 통해 요청을 쉽게 처리하여 권한 제어, 로깅, 요청 확인 및 기타 기능을 구현하여 애플리케이션의 보안 및 유지 관리성을 향상시킬 수 있습니다. 이 기사에서는 ThinkPHP6에서 요청 처리를 위해 미들웨어를 사용하는 방법을 소개합니다.

1. 미들웨어란?

미들웨어는 클라이언트가 보낸 요청을 가로채서 처리할 수 있는 독립적인 요청 처리기입니다. ThinkPHP6에서는 미들웨어가 PSR-15 사양을 기반으로 설계되었습니다. 미들웨어를 통해 요청을 사전 처리하거나 사후 처리하여 로그인 확인, 권한 제어, 요청 필터링, 응답 처리 등과 같은 몇 가지 공통 기능을 구현할 수 있습니다.

2. ThinkPHP6 미들웨어 사용

  1. 미들웨어 생성

ThinkPHP6에서는 명령줄 도구를 통해 빠르게 미들웨어를 생성할 수 있습니다. app/middleware 디렉토리에 CheckAuth라는 미들웨어를 생성하려면 다음 명령을 사용하십시오.

php think make:middleware CheckAuth

생성된 CheckAuth 미들웨어 클래스는 다음과 같습니다.

<?php

namespace appmiddleware;

class CheckAuth
{
    public function handle($request, Closure $next)
    {
        // 执行中间件操作

        return $next($request);
    }
}

위 코드에서 미들웨어 클래스에는 핸들 메소드가 포함되어 있어야 합니다. 핸들 메소드는 $request 및 $next라는 두 개의 매개변수를 허용합니다. 여기서 $request는 요청 객체이고 $next는 다음 미들웨어 또는 컨트롤러의 처리 메소드입니다. 핸들 메소드에서는 $request 객체에 대해 일부 전처리를 수행한 다음 return $next($request)를 사용하여 다음 미들웨어 또는 컨트롤러의 처리 메소드를 호출할 수 있습니다.

  1. 미들웨어 등록

미들웨어를 생성한 후 애플리케이션에 등록해야 합니다. ThinkPHP6에서는 애플리케이션 구성, 경로 정의, 컨트롤러 주석을 통해 미들웨어를 등록할 수 있습니다.

2.1 애플리케이션 구성

애플리케이션 구성 파일 config/app.php에서 전역 미들웨어를 구성하거나 요청에 따라 미들웨어를 설정할 수 있습니다.

// 全局中间件
'middleware' => [
    appmiddlewareCheckAuth::class,
],

// 按需设置中间件
'route' => [
    // Route::group 也支持
    'blog/detail' => ['appmiddlewareCheckAuth'],
]

위 코드에서는 미들웨어 구성 항목을 사용하여 미들웨어를 전역적으로 등록할 수 있습니다. 각 미들웨어의 클래스 이름은 쉼표로 구분됩니다. 경로 구성 항목에서는 다양한 경로에 대한 미들웨어를 지정할 수 있습니다.

2.2 경로 정의

Route::rule 메서드 또는 Route::group 메서드에서 미들웨어를 지정할 수 있습니다.

use thinkacadeRoute;

Route::rule('blog/detail', 'blog/detail', 'GET')->middleware('appmiddlewareCheckAuth');

위 코드에서는 Route::rule 메소드 호출 시 미들웨어를 지정하기 위해 미들웨어 메소드를 추가했습니다.

2.3 컨트롤러 주석

컨트롤러 주석에 미들웨어를 지정할 수 있습니다.

namespace appcontroller;

/**
 * @middleware(appmiddlewareCheckAuth::class)
 */
class Blog
{
    public function detail()
    {
        // 控制器的处理逻辑
    }
}

위 코드에서는 미들웨어를 지정하기 위해 컨트롤러 주석에 middleware 속성을 추가했습니다.

  1. 미들웨어 실행 순서

ThinkPHP6에서는 미들웨어가 등록 순서대로 실행되어 먼저 등록 및 실행된 후 등록 및 실행됩니다.

애플리케이션 구성 및 컨트롤러 주석에서 Middleware::class 메서드를 사용하여 미들웨어의 실행 순서를 지정할 수 있습니다. 아래와 같이

// 全局中间件按照顺序执行
'middleware' => [
    appmiddlewareLog::class,
    appmiddlewareCheckAuth::class,
],

// 按需设置中间件按照顺序执行
'route' => [
    'blog/detail' => ['appmiddlewareLog', 'appmiddlewareCheckAuth']
],

// 控制器注解中间件按照顺序执行
namespace appcontroller;

/**
 * @middleware([appmiddlewareLog::class, appmiddlewareCheckAuth::class])
 */
class Blog
{
    public function detail()
    {
        // 控制器的处理逻辑
    }
}

위 코드에서는 미들웨어 등록 순서대로 Middleware::class 메소드를 지정했습니다.

  1. 미들웨어의 매개변수 전달

미들웨어는 매개변수 전달을 통해 데이터를 공유할 수 있습니다. 핸들 메소드에서는 $request 객체에 속성, 메소드 또는 매개변수를 추가한 다음 $request 객체를 다음 미들웨어나 컨트롤러에 전달하여 데이터 공유를 달성할 수 있습니다.

예를 들어 다음 예에서는 첫 번째 미들웨어에 $name 속성을 정의하고 이를 두 번째 미들웨어와 컨트롤러에 전달하여 해당 속성을 사용할 수 있도록 합니다.

<?php

namespace appmiddleware;

class CheckAuth
{
    public function handle($request, Closure $next, $name)
    {
        $request->name = $name;

        return $next($request);
    }
}

class Log
{
    public function handle($request, Closure $next)
    {
        echo 'name:' . $request->name . '<br>';
        return $next($request);
    }
}

namespace appcontroller;

class Blog
{
    public function detail(Request $request)
    {
        echo 'name:' . $request->name . '<br>';
        // 控制器的处理逻辑
    }
}

// 路由配置文件
use thinkacadeRoute;

Route::rule('blog/detail', 'blog/detail', 'GET')
->middleware(['appmiddlewareCheckAuth:name', 'appmiddlewareLog']);

위 코드에서는 CheckAuth 클래스의 핸들 메소드에 $name 속성을 정의하고 이를 $request 객체에 저장합니다. Log 클래스와 Blog 컨트롤러의 핸들 메소드 모두에서 $request 객체를 통해 이 속성에 액세스할 수 있습니다.

경로 정의에서는 미들웨어의 매개변수 전달 기능을 사용하여 매개변수 이름을 CheckAuth 미들웨어에 전달합니다. 주문형 미들웨어 설정에서 Middleware::class 메소드를 사용하여 미들웨어 매개변수를 지정할 수도 있습니다.

5. 요약

미들웨어는 요청 전후에 클라이언트 요청을 전처리하거나 후처리할 수 있는 일반적으로 사용되는 요청 처리 도구입니다. ThinkPHP6에서는 미들웨어가 PSR-15 사양을 기반으로 설계되어 있어 미들웨어를 통해 권한 제어, 로깅, 요청 확인 등의 기능을 쉽게 구현할 수 있습니다. 미들웨어는 등록된 순서대로 실행되며, 매개변수 전달을 통해 미들웨어 간 데이터 공유가 가능하다. 미들웨어의 유연한 사용을 통해 애플리케이션의 보안, 유지 관리성 및 확장성을 향상할 수 있습니다.

위 내용은 ThinkPHP6에서 요청 처리를 위해 미들웨어를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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