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 –>
国内我在用最新版5.3
5.3的确改变了中间件的实现逻辑
路由匹配 - 读取路由中间件 - 实例化Controller - 读取Controller中间键 - 执行中间件 - 执行action
个人不鼓励在Controller的构造函数中初始化方法,除了使用中间件调用之外,不要做任何逻辑判断的事情。
重写 CallAction 在 CallAction中逻辑判断
因为任何一个路由的匹配都会使用
CallAction
调取Controller里面的方法构造函数本来就是应该先执行的,好像没什么不对。。。
我翻了下laravel5.3的文档,现在中间件都是在构造后执行,要么你换成其他低版本,要么不用中间件,或者把你原来构造函数要调用的方法都写在中间件里。
举个栗子:(注意:该特性需要laravel版本5.3.4以上)