ホームページ  >  記事  >  PHPフレームワーク  >  ThinkPHP6 でリクエスト処理にミドルウェアを使用するにはどうすればよいですか?

ThinkPHP6 でリクエスト処理にミドルウェアを使用するにはどうすればよいですか?

WBOY
WBOYオリジナル
2023-06-12 12:25:402377ブラウズ

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);
    }
}

上記のコードでは、ミドルウェア クラスに handle メソッドが含まれている必要があります。 handle メソッドは、$request と $next の 2 つのパラメーターを受け入れます。$request は要求オブジェクト、$next は次のミドルウェアまたはコントローラーの処理メソッドです。 handle メソッドでは、$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()
    {
        // 控制器的处理逻辑
    }
}

上記のコードでは、ミドルウェアを指定するために、コントローラーのアノテーションにミドルウェア属性を追加しました。

  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. ミドルウェアのパラメータ受け渡し

ミドルウェアはパラメータ受け渡しを通じてデータを共有できます。 handle メソッドでは、$request オブジェクトにプロパティ、メソッド、またはパラメーターを追加し、$request オブジェクトを次のミドルウェアまたはコントローラーに渡してデータ共有を実現できます。

たとえば、次の例では、最初のミドルウェアで属性 $name を定義し、それを 2 番目のミドルウェアとコントローラーに渡して、その属性を使用できるようにします。

<?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 クラスの handle メソッドで $name 属性を定義し、それを $request オブジェクトに保存します。 Log クラスのハンドル メソッドとブログ コントローラーの両方で、$request オブジェクトを通じてこのプロパティにアクセスできます。

ルート定義では、ミドルウェアのパラメータ引き渡し機能を使用してパラメータ名をCheckAuthミドルウェアに渡します。オンデマンド ミドルウェアの設定では、Middleware::class メソッドを使用してミドルウェア パラメーターを指定することもできます。

5. 概要

ミドルウェアは、リクエストの前後でクライアント リクエストを前処理または後処理できる、一般的に使用されるリクエスト処理ツールです。 ThinkPHP6では、PSR-15仕様に基づいてミドルウェアが設計されており、ミドルウェアを通じて権限制御、ロギング、リクエスト検証などの機能を簡単に実装できます。ミドルウェアは登録順に実行され、パラメータの受け渡しによりミドルウェア間でデータを共有できます。ミドルウェアを柔軟に活用することで、アプリケーションのセキュリティ、保守性、拡張性を向上させることができます。

以上がThinkPHP6 でリクエスト処理にミドルウェアを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。