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 CheckEs 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
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
,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
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
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.
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. Der zweite Schritt besteht darin, Funktionsregeln festzulegen und mit den selbst erstellten Dateien in der Konfigurationskonfiguration zusammenzuarbeiten, um den Zugriff zu steuern
<?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().'.'.Request::action().'.'.Request::action().'_api')) // 如果结果不符合要求则返回错误信息 exit(json_encode(['code'=>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
"