Heim  >  Artikel  >  PHP-Framework  >  Wie wird die TP5.1-Middleware im Controller verwendet? (Detaillierte Erklärung des Prozesses)

Wie wird die TP5.1-Middleware im Controller verwendet? (Detaillierte Erklärung des Prozesses)

藏色散人
藏色散人nach vorne
2022-01-13 11:09:102572Durchsuche

Die folgende Tutorial-Kolumne zum ThinkPHP-Framework stellt Ihnen den Prozess der Verwendung der ThinkPHP5.1-Middleware im Controller vor. Ich hoffe, dass sie Freunden in Not hilfreich sein wird! Der Prozess der Verwendung der ThinkPHP5.1-Middleware im Controller

Der Beginn der Verwendung der Middleware und meine Schrittbeschreibung können Ihnen helfen, die gerade PHP oder das Think-Framework lernen Ich kann mit Ihnen kommunizieren und mich weiterentwickeln.

Ich verstehe bereits die Rolle der Middleware im Thinkphp-Framework. Wenn der Benutzer auf Ressourcen zugreift, werden der generierte Header oder die Anforderungsparameter des Benutzers in den Typ „Post“ oder „Get“ eingegeben URL-Pfad zur Operation, einschließlich Vor- oder Nachoperations- oder Ausführungsreihenfolge und anderer Lösungen. Nachdem ich es verstanden habe, bin ich der Meinung, dass dieses Ding bei der Verarbeitung von Benutzeranforderungsdaten sehr nützlich ist, was viel besser ist als die direkte Verarbeitung im Controller oder im Verhalten. (Also habe ich mit voller Spannung das 5.1-Dokumentationshandbuch gelesen). Befolgen Sie nach dem Lesen des Dokuments die offizielle manuelle Methode und geben Sie den folgenden Code in die Befehlszeile ein:

php think make:middleware Check

Es gibt kein Problem mit der Bedeutung dieses Codes, der darin besteht, ein Middleware-Verzeichnis zu erstellen und zu erstellen eine neue Der Name lautet Middleware-Datei prüfen

Der Inhalt wird normal und problemlos vervollständigt


Der 5.1-Dokumentcode wird gemäß dem Dokumentanforderungsplan eingefügt

Es wird vollständig gemäß dem Handbuch kopiert. Es gibt keine Probleme . Bestätigen Sie, dass es gespeichert wurde und keine Fehler vorliegen.

Wie wird die TP5.1-Middleware im Controller verwendet? (Detaillierte Erklärung des Prozesses)Hiermit bestätige ich, dass eine Datei mit dem Namen middleware.php im Stammverzeichnis meines Admin-Moduls abgelegt wird, wie im Bild unten gezeigt. Wenn Sie Middleware verwenden möchten, können Sie sich hiermit registrieren Modul, einfach einsatzbereit.

Dann habe ich den Code wie im Bild gezeigt in den Controller eingefügt, entsprechend dem Inhalt im Dokumentationshandbuch und der Inhaltsbeschreibung der Controller-Middleware

,

Wie wird die TP5.1-Middleware im Controller verwendet? (Detaillierte Erklärung des Prozesses)Es stellte sich heraus, dass der Code nicht ausgeführt wurde Wenn Sie dies tun, sollten Sie es nach meinem Verständnis direkt anwenden können, aber das Ergebnisobjekt ist leer. In meiner Verzweiflung habe ich nach meinem eigenen Verständnis den Code in der Middleware gestoppt

Wie wird die TP5.1-Middleware im Controller verwendet? (Detaillierte Erklärung des Prozesses)

Nachdem ich gesehen hatte, was ich sehen wollte, habe ich meinen $request erneut getestet. Ich habe gesehen, worauf ich mich schon lange gefreut habe, meine Middleware ist fertig

Wie wird die TP5.1-Middleware im Controller verwendet? (Detaillierte Erklärung des Prozesses)

An diesem Punkt sagen mir die oben genannten Schritte, dass der erste Schritt abgeschlossen ist und ich nun eine Middleware verwenden kann tun, was ich tun möchte

Der erste Schritt besteht darin, den Namen so zu ändern, wie ich ihn haben möchte. Hier gibt es drei Änderungen. Wie wird die TP5.1-Middleware im Controller verwendet? (Detaillierte Erklärung des Prozesses)


Nach dem erneuten Auffrischen stellte ich fest, dass es weiterhin verwendet werden kann und absolut reibungslos läuft. In diesem Schritt habe ich auch einige meiner Verwendungsideen gefestigt, z. B. die Erstellung mehrerer Middlewares. Ich kann hier auch einige meiner eigenen Verarbeitungen durchführen Methoden, einschließlich Änderungen in der Ausführungsreihenfolge, bringen mich zum Staunen. Von nun an kann der Code wieder etwas höher werden. Wie wird die TP5.1-Middleware im Controller verwendet? (Detaillierte Erklärung des Prozesses)Der zweite Schritt besteht darin, Funktionsregeln festzulegen und mit den selbst erstellten Dateien in der Konfigurationskonfiguration zusammenzuarbeiten, um den Zugriff zu steuern
Wie wird die TP5.1-Middleware im Controller verwendet? (Detaillierte Erklärung des Prozesses)

Wie wird die TP5.1-Middleware im Controller verwendet? (Detaillierte Erklärung des Prozesses)

Wie wird die TP5.1-Middleware im Controller verwendet? (Detaillierte Erklärung des Prozesses)

<?php namespace apphttpmiddleware;
use thinkfacadeConfig;
use thinkfacadeRequest;
/**
登陆接口通用数据配置检测*/
class AdminLoginCheck
{
/**
 * handle  重写处理请求对象的操作函数
 * @param  object Request $request 请求对象
 * @param  object \Closure $next 响应对象
 * @return array 错误返回的信息
 *         code 返回码
 *         msg 返回信息
 *         data 返回数据
 * @return  object 响应对象
 */
public function handle($request, \Closure $next)
{
    // 检测配置,查看该接口服务是否被暂停使用
    if (true !== Config::get(Request::module().&#39;.&#39;.Request::action().&#39;.&#39;.Request::action().&#39;_api&#39;))
    // 如果结果不符合要求则返回错误信息
    exit(json_encode([&#39;code&#39;=>1,'msg'=>'Interface_Pause_service','data'=>'']));
    // 检测配置,是否执行请求验证类型
    if (false !== Config::get(Request::module().'.'.Request::action().'.'.Request::action().'_request'))
    {

        // 登陆请求规则,传入相应方法,查看该接口是否符合请求类需
        $res = self::loginRequestRole(Request::action());
        // 如果结果不符合要求则返回错误信息
        if (true !== $res) exit(json_encode(['code'=>1,'msg'=>'Request_Type_Not_Matching','data'=>'']));
    }
    // 检测配置,是否执行地址限制验证
    if (false !== Config::get(Request::module().'.'.Request::action().'.'.Request::action().'_address'))
    {
        // 客户端访问地址限制请求规则
        $res = self::loginAddressDispose(Request::ip());
        // 如果结果不符合要求则返回错误信息
        if (true !== $res) exit(json_encode(['code'=>1,'msg'=>'Address_Not_Access','data'=>'']));
    }
    // 格式化与处理前台参数
    $request = self::loginParamDispose(Request::action(),$request);
    
    // 继续执行进入到控制器
    return $next($request);
}

/**
 * loginRequestRole 请求类型验证
 * @param  string $scene 根据路径传入方法名称
 * @return bool 验证用户访问的接口是否符合预设的请求要求
 */
protected static function loginRequestRole($scene)
{
    switch ($scene)
    {
        // 登陆页面请求验证
        case 'index':
            if (Request::isGet()) return true;
            else return false;
            break;
        // 登陆接口请求验证
        case 'login':
            if (Request::isPost() || Request::isAjax() || Request::isPjax()) return true;
            else return false;
            break;
        // 登陆接口请求验证
        case 'resetPassword':
            if (Request::isPost() || Request::isAjax() || Request::isPjax()) return true;
            else return false;
            break;
        // 默认验证或者不存在的场景返回
        default:
            return false;
            break;
    }
}

/**
 * loginAddressDispose 地址是否允许访问
 * @param  string $address 需要传入一个address地址
 * @return string     返回错误信息
 * @return bool     检测正确返回真
 */
protected static function loginAddressDispose($address)
{
    // 读取配置内的设置参数
    $data = Config::get(Request::module().'.'.Request::action().'.'.Request::action().'_address_data');
    // 如果配置信息address列表为空则返回不能访问
    if (empty($data)) return false;
    // 循环地址列表信息解开连续address地址列表
    foreach ($data as $key => $val) { if ($val == $address) return true; }
    // 如果继续执行下去依然没有 返回不能访问
    return false;
}

/**
 * loginParamDispose post内容与格式处理
 * @param  string $scene 需要前往的接口名称
 * @param  object $request 请求的对象内容
 * @return object 返回处理过的请求对象
 */
protected static function loginParamDispose($scene,$request)
{
    switch ($scene)
    {
        // 登陆页面
        case 'index':
            break;
        // 登陆接口请求参数处理
        case 'login':
            // 前台用户传入的参数进行调整转换
            $request->username = $request->param('user');
            $request->password = $request->param('pass');
            $request->captcha = $request->param('code');
            // 对记住我进行处理
            $remember = $request->param('remember');
            if (null === $remember) $request->remember = 'shut';
            else $request->remember = 'open';
            break;
        // 重置密码接口参数处理
        case 'resetPassword':
            // 前台用户传入的参数进行调整转换
            $request->username = $request->param('user');
            $request->phone = $request->param('mobile');
            $request->phonecode = $request->param('code');
            $request->password = $request->param('pass');
            $request->repassword = $request->param('repass');
            break;
        // 默认接口或者不存在的场景返回
        default:
            break;
    }
    return $request;
}
}

Jetzt ist eine einfache Middleware-Erkennung abgeschlossen. Natürlich unterliegt diese Schreibmethode festen Anforderungen. Beispielsweise sollte bei mehreren Steuerzugriffen die Schnittstelle mit der API vereinheitlicht werden Mit Anfrage. Egal was alles normal verwendet werden kann. Die beiden Probleme, über die ich separat sprechen möchte, sind, dass Sie den Inhalt, der in der Konfiguration verwendet werden muss, tatsächlich weiterhin verwenden können. Das erste Problem ist, dass dies bei Middleware nicht der Fall ist Allmächtig und kann nur eine gewisse Anforderungsverarbeitung durchführen. Es ist niemals erforderlich, eine erweiterte Überprüfung durchzuführen. Das Wichtigste hier ist, eine Vorabüberprüfung durchzuführen, um die Daten sicher oder vollständig zu machen Das Problem besteht darin, nicht zu versuchen, unangemessene Dinge in der Middleware auszuführen. Wenn Sie Middleware verwenden, um sehr komplexen Code oder lange Vorgänge auszuführen, wird dies meiner Meinung nach viele Menschen in die Irre führen Hier heißt es, dass die von Ihrer eigenen Funktionsbibliothek definierten Funktionen so wenig wie möglich verwendet werden können, z. B. Passwortverschlüsselung und ähnliche Codes.

Empfohlenes Lernen: „

Die neuesten 10 Thinkphp-Video-Tutorials

"

Das obige ist der detaillierte Inhalt vonWie wird die TP5.1-Middleware im Controller verwendet? (Detaillierte Erklärung des Prozesses). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen