ThinkPHP6 のフロントエンドミドルウェアとバックエンドミドルウェアの違いは何ですか?

王雪芹
リリース: 2020-05-06 17:09:11
オリジナル
3451 人が閲覧しました

前回の例では、ミドルウェアの定義を学び、ミドルウェアの意味を理解した後、マニュアルをめくってみると、「プレミドルウェア」と「ポストミドルウェア」という別のマニュアルが見つかりました。両者の違いは何ですか?

1. 定義の違い。

プレミドルウェアとポストミドルウェアの定義が異なることは、公式サイトのマニュアルを見れば容易にわかりますので、以下に見てみましょう。

ミドルウェア以前の定義:

<?php
namespace app\middleware;
class Before
{
    public function handle($request, \Closure $next)
    {
        // 添加中间件执行代码
        return $next($request);
    }
}
ログイン後にコピー

ミドルウェア以降:

<?php
namespace app\middleware;
class After
{
    public function handle($request, \Closure $next)
    {
        $response = $next($request);
        // 添加中间件执行代码
        return $response;
    }
}
ログイン後にコピー

詳しく見てみると、最終的には、この 2 つは実行コードと $next であることがわかりました。 ($request) 順序の問題、プレミドルウェアとポストミドルウェアの鍵となるのはこの順序です。

2. $request は異なります。

次のコードをプレミドルウェアとポストミドルウェアでそれぞれ出力できます。

halt($request);
ログイン後にコピー

慎重に比較したところ、プレミドルウェアのコントローラーとメソッドが同じであることがわかりました。ミドルウェアが空の場合、ポストミドルウェアはコントローラー名とメソッドを取得できます。したがって、現在アクセスされているコントローラーとメソッドを取得したい場合は、ポストミドルウェアを使用して解決する必要があります。

ThinkPHP6 のフロントエンドミドルウェアとバックエンドミドルウェアの違いは何ですか?ThinkPHP6 のフロントエンドミドルウェアとバックエンドミドルウェアの違いは何ですか?

#3. ミドルウェアがログイン シナリオを傍受します。

まず、公式 Web サイトでミドルウェアの定義を見てみましょう:

ミドルウェアは主に、アプリケーションの HTTP リクエストをインターセプトまたはフィルターし、実行するために使用されます。必要な事務処理を行います。

公式 Web サイトの定義を見て、友人はログイン傍受にはミドルウェアを使用するのが本当に最善であると考えるかもしれません。しかし、プレミドルウェアを使用すべきでしょうか、それともポストミドルウェアを使用すべきでしょうか?

<?php
namespace app\middleware;
class After
{
    public function handle($request, \Closure $next)
    {
        $response = $next($request);
        // 添加中间件执行代码
        if(empty(&#39;session&#39;)){
            echo &#39;登录不合法&#39;;
            //跳转到登录页面
        }
        return $response;
    }
}
ログイン後にコピー

バックエンド ホーム ページ:


public function index(){
    echo &#39;后台首页&#39;;
}
ログイン後にコピー
実行結果から、ログイン ジャンプ前でもインデックス メソッドを実行でき、コンテンツを出力できることがわかります。

したがって、ポストミドルウェアはログインシナリオでは使用できません。ログインを傍受するにはプレミドルウェアが最適です。このとき、現在のアクセスがログインであるかどうかも判断する必要があります。ログインの場合は、 、多くのリダイレクトが発生するため、友人はこれを適切に処理する必要があります。

上記はプレミドルウェアとポストミドルウェアの紹介ですが、実際のプロジェクトでは、実際のビジネスロジックに基づいてプレミドルウェアを使用するかポストミドルウェアを使用するかを決定します。

以上がThinkPHP6 のフロントエンドミドルウェアとバックエンドミドルウェアの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート