Laravel – 5.3 große Änderungen am Middleware-Ausführungsprozess!
伊谢尔伦
伊谢尔伦 2017-05-16 16:49:21
0
2
800

Niemand in China verwendet die neueste Version. Ist Ihnen diese logische Änderung nicht aufgefallen? Haben Sie die Anmeldung des Benutzers im Konstruktor nicht überprüft (Sie geraten in Schwierigkeiten, wenn Sie es nicht bemerkt haben)?
Hilf mir, diese offizielle Antwort zu lesen: https://github.com/laravel/fr...
**Mein Englisch ist nicht gut! bitte erkläre! Eine sehr wichtige Verbesserung in Laravel5.3
Warum machen Sie das?
Wie soll ich neue Logik schreiben? **
Der Grund, warum ich diese Verbesserung brauche und wie ich meine Logik lösen kann!

Ich bezweifle, dass dadurch __construct ungültig wird.
Es ist vernünftiger, die Middleware außer als Attribut zur Middleware hinzuzufügen!
protected $exclusive =['login','register','oauth_callback'];
Tangled: Es fühlt sich unvernünftig an, dies hinzuzufügen (es wäre unvernünftig, wenn mehrere Gruppen dies aufrufen würden), fügen Sie dies nicht hinzu und schreiben Sie es für eine login_ _construct fühlt sich wieder schlecht an!

Aktuelle Antwort: Die im ersten Stock ist eigentlich in Ordnung, aber diese ist viel eleganter
CallAction-Beschreibung: https://laravel.com/api/maste...

Laravel 5.3, das ohnehin die neueste Version ist, wird jedes Mal aktualisiert!
Jetzt gibt es diese 3: Middleware, Controller und Konstruktor.
Es gibt 2 Funktionen, die im Konstruktor instanziiert werden müssen. Und es muss angemeldet sein. Eine Instanziierung ist ohne Anmeldung nicht zulässig.
Konstrukteur:

Middleware:

Methode:

Ausgabe:


Auf der Route


Benutzerdefinierte Middleware

Laut der logischen Ausgabe von Laravel:
2 Konstruktor
1 Middleware
3 Dies ist eine Aktion

Aber in diesem Fall wird der Konstruktor ohne Anmeldung instanziiert, und egal wo die Middleware platziert wird, wird zuerst der Konstruktor und dann die Middleware ausgeführt.
Das gewünschte Ergebnis ist:
1 Middleware, Anmeldung bestimmen, kein Sprung nach dem Anmelden
2Konstruktor, nach dem Anmelden instanziiert
3Das ist Werbung, führen Sie Werbung aus!
Wie ändere ich die Logik? Ich muss mich anmelden, bevor ich die öffentliche Methode aufrufe. Wenn ich nicht angemeldet bin, gehe ich zur Anmeldung (ohne Registrierung und Anmeldung)!

Das wahrscheinliche Problem besteht darin, dass Laravel zuerst den Konstruktor ausführen muss und dann die Middleware aufgerufen werden kann.
Welche Art von Logik sollte ich dann verwenden, um meine Anforderungen zu erfüllen?

$this->wx_api();
$this->agent();

Diese beiden gebräuchlichen werden normalerweise in __construct geschrieben!

Ich bin immer noch verwirrt. Wenn es im Router definiert ist, hat die Beurteilungsklasse zu diesem Zeitpunkt die Middleware und dann den Konstruktor und dann die Methode! Wie konnte so ein Prozess passieren!


Für das grobe Methodenproblem siehe Folgendes (Sie können nicht in den Konstruktor springen, und das Schreiben von Echo und Exit in Laravel wäre super hässlich. Wie auch immer, ich kann es nicht ertragen. Die obige Demonstration dient nur zum Anschauen!)

http://laravelacademy.org/pos...
Nachdem ich sorgfältig darüber nachgedacht hatte, stellte ich fest, dass dies das Erfordernis der objektorientierten Trennung von Verantwortlichkeiten perfekt zerstört und den Kopplungsgrad erfolgreich verbessert.
Aufgrund dieses Satzes dachte ich Verwenden Sie Middleware! (Welches ist besser? Ich bin ein Neuling und weiß nicht einmal, wie ich es sagen soll!)


Laravel 5.3 ist eine Methode zum Erstellen von Middleware –>

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

Antworte allen(2)
迷茫

国内我在用最新版5.3

5.3的确改变了中间件的实现逻辑

路由匹配 - 读取路由中间件 - 实例化Controller - 读取Controller中间键 - 执行中间件 - 执行action

个人不鼓励在Controller的构造函数中初始化方法,除了使用中间件调用之外,不要做任何逻辑判断的事情。

重写 CallAction 在 CallAction中逻辑判断

因为任何一个路由的匹配都会使用CallAction调取Controller里面的方法

在5.3以下 版本中,会优先执行中间件,然后初始化Controller,这是和5.3最大的区别。

淡淡烟草味

构造函数本来就是应该先执行的,好像没什么不对。。。

我翻了下laravel5.3的文档,现在中间件都是在构造后执行,要么你换成其他低版本,要么不用中间件,或者把你原来构造函数要调用的方法都写在中间件里。

举个栗子:(注意:该特性需要laravel版本5.3.4以上)

public function __construct() {

    $this->middleware(function ($request, $next) {
        $this->wx_api();
        return $next($request);
    });
}

public function wx_api () {
    
}
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage