國內沒人用最新版本,沒發現這個邏輯變化?都不在建構函式裡判斷使用者登入的(沒發現的你悲劇了)?
幫我看下這個正式回覆:https://github.com/laravel/fr...
**我英文不好!解釋下! laravel5.3很重要的改進
為什麼要這麼做?
我該怎麼寫新的邏輯? **
我需要這樣改進的理由,我要怎麼解決我的邏輯!
疑問這樣做就是廢了__construct
那麼中間件的except應該加到中間件作為一個屬性比較合理!
protected $except =['login','register','oauth_callback'];
糾結:加了這個覺得不合理(多個群組呼叫這個的話就不合理了),不加這個吧為了一個登陸寫__construct又覺得不好!
目前答案:1樓的其實也可以,不過這個優雅多了
callAction說明:https://laravel.com/api/maste...
##laravel 5.3,反正是最新的,每次都update!
現在有這3個,中間件,控制器,建構子
有2個函數必須在建構函式裡實例化。而且必須登入狀態下,不登入不准實例化。 建構子:
##中介軟體:
##方法:
#輸出:
#路由裡
##按laravel的邏輯輸出:
2建構子
1中間件
3這是推廣
但是這樣的話構造函數裡沒登入就實例化了,而且不管中間件放在哪,都是先運行建構子再運行中間件的,
我要的結果是:
1中間件,判斷登錄,沒登陸就跳到
2建構函數,登入後實例化
3這是推廣,執行推廣!
怎麼修改邏輯,我要登入後才呼叫公用方法,沒登入的跳轉登入(排除註冊和登入)!
大概的問題就是laravel必須先運行構函數,然後才可以呼叫中間件,
那我應該怎麼個邏輯才可以實現我的要求的!
$this->wx_api();
$this->agent();
這2個公用的,一般都寫到__construct裡的吧!
我還是納悶,照常理,路由器裡定義了,判斷類別裡有這個方法,然後這時候呼叫中間件,然後執行建構函數,然後是方法!怎麼會這種流程呢!
粗暴方法問題,看下面的(不能在構造函數裡跳轉,寫echo和exit在laravel你會覺得超級難看,反正我受不了,上面的演示純粹為了看!)
http://laravelacademy.org/pos...
仔細的想了一下,發現這個完美的破壞了面向對象的職責分離的要求,並成功的提高了耦合度
因為這句話,我才想使用中間件! (到底哪個好,我是新手,我都不知道怎麼說!)
laravel 5.3是建構Middleware -> 建構Controller ->執行中間件handle -> 執行Controller中間件 -> Controller的方法,所以中間件是在建構子後執行的
國內我在用最新版5.3
5.3的確改變了中介軟體的實作邏輯
路由匹配 - 读取路由中间件 - 实例化Controller - 读取Controller中间键 - 执行中间件 - 执行action
個人不鼓勵在Controller的建構子中初始化方法,除了使用中間件呼叫之外,不要做任何邏輯判斷的事情。
重写 CallAction 在 CallAction中逻辑判断
因為任何一個路由的匹配都會使用
CallAction
調取Controller裡面的方法建構函式本來就是應該先執行的,好像沒什麼不對。 。 。
我翻了下laravel5.3的文檔,現在中間件都是在構造後執行,要么你換成其他低版本,要么不用中間件,或者把你原來構造函數要調用的方法都寫在中間件裡。
舉個栗子:(注意:此特性需要laravel版本5.3.4以上)