3分鐘短文:Laravel路子真野啊!路由暱稱前綴中間件

2020-12-14 騰訊網

引言

上一章內容我們介紹了使用laravel路由動詞定義方便的url,以及通過url參數綁定傳遞數據,本文我們繼續深入Route功能,學習一些提升生產力的方法,在現實場景中也非常實用。

「暱稱」

如果你的應用程式路由條目可以達到300到500條,光是管理這些路由地址不重複,或者是瀏覽某些部分的路由,

都將是一件非常考驗腦力的事兒。

有沒有想過,能不能給路由起個名字,方便記憶,不用想著路由定義的多複雜,咱們直接用別名訪問?laravel為我們考慮到了,

比如路由這樣寫:

Route::get('members/{id}', 'MembersController@show')->name('members.show');

這樣定義之後在HTML文件內比如有 a 標籤,或者 form 表單的 action,填url地址的時候,就可以使用laravel的助手函數,這樣來寫:

這樣使用起來,就好像記一個函數名一樣,然後通過數組傳入綁定的位置參數,一般不容易寫錯,格式化也更好。比如我們之前講述的,使用laravel的 Route::resource() 方法生成 restful 風格的api,那麼如果對一個 Phone 模型相關的接口做別名,大概會是這樣子的:

photos.index

photos.create

photos.store

photos.show

photos.edit

photos.update

photos.destroy

其實助手函數 route 提供的參數傳入,可以靈活組裝url,比如按照位置傳入的數據,不指定鍵名,按順序傳入:

route('users.comments.show', [1, 2])

// http://myapp.com/users/1/comments/2

也可以明確鍵名,指定傳入的位置參數:

route('users.comments.show', ['userId' => 1, 'commentId' => 2])

// http://myapp.com/users/1/comments/2

為了驗證位置參數是否和數組鍵名綁定關係,我們顛倒傳入的參數順序,看看輸出是否如預期:

route('users.comments.show', ['commentId' => 2, 'userId' => 1])

// http://myapp.com/users/1/comments/2

可見,route函數是按照鍵名綁定到位置參數的。如果傳入的數組比可接受的數據要多,route函數會將其作為 get 方法的 querystring 進行傳遞:

route('users.comments.show', ['userId' => 1, 'commentId' => 2, 'opt' => 'a'])

// http://myapp.com/users/1/comments/2?opt=a分組

分而治之,對於有相同類目的路由,應該歸類到一起,成為一個組。這就是路由組的由來。我們來看一下,不附加任何額外的功能的組是如何聲明的:

Route::group([], function () {

Route::get('hello', function () {

return 'Hello';

});

Route::get('world', function () {

return 'World';

});

});

有了分組,那麼可以手動指定,這個分組內所有註冊的路由,都要經過某個中間件,可以聲明如下:

Route::group(['middleware' => 'auth'], function () {

Route::get('dashboard', function () {

return view('dashboard');

});

Route::get('account', function () {

return view('account');

});

});

其中這個 『middleware』 => 『auth』 的 auth 中間件,是聲明在 app/Http/Kernel.php 文件內,下面這一段是源碼內自帶的中間件:

protected $routeMiddleware = [

'auth' => \App\Http\Middleware\Authenticate::class,

'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,

'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,

'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,

'can' => \Illuminate\Auth\Middleware\Authorize::class,

'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,

'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,

'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,

'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,

'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,

];

我們可以直接拿來用。當然了,上面的示例是在路由組內引入的中間件。對於極為特殊的中間件功能,不能在路由組內統一引用的,可以放到控制器的構造函數內調用。比如下面的代碼:

class DashboardController extends Controller

{

public function __construct()

{

$this->middleware('auth');

$this->middleware('admin-auth')->only('admin');

$this->middleware('team-member')->except('admin');

}

}

因為控制器類已經繼承了中間件的註冊流程,所以可以有效使用中間件的攔截、驗證功能。

加前綴

在規劃路由時,能省則省,功能一致的放在一起,同時在路由數量多了之後,能夠有效地使用前綴區分不同的功能模塊,也是一個很好的實踐。

為一組路由加前綴,就想註冊中間件一樣,在配置內手動指定,比如下面這樣:

Route::group(['prefix' => 'api'], function () {

Route::get('/', function () {

// 路徑 /api

});

Route::get('users', function () {

// 路徑 /api/users

});

});

前綴是給url路徑中路由部分指定的,我們還可以為二級域名指定路由,相似地,聲明如下代碼:

Route::group(['domain' => 'api.myapp.com'], function () {

Route::get('/', function () {

//

});

});

那麼該路由組內所有路由,就僅對指定的二級域名起作用。當然了二級域名還要使用nginx的反向代理配合使用。

laravel的花樣是真多啊!

不僅如此,我們還可以為路由組聲明是指定的命名空間下的控制器所使用的。這樣,可以通過把相似功能模塊放在相同命名空間下,從而達到路由分組的目的。比如:

Route::group(['namespace' => 'API'], function () {

// 對應 App\Http\Controllers\API\EventController

Route::get('api/', 'EventController@index');

});寫在最後

laravel是給web藝術家準備的,你想到的,想不到的,基礎的,高級的功能都有了。沒有的,你也可以手動實現輪子夢。從上面註冊的路由方法,大家應該能有所感觸。

Happy coding :-)

我是@程式設計師小助手,專注編程知識,圈子動態的IT領域原創作者

相關焦點

  • PHP 框架 Blink 0.3 發布,新增插件機制及路由分組功能
    主要特性:依賴注入與服務定位器路由,良好的 RESTful 支持登錄與認證機制Session 管理Request 與 Response 中間件插件架構良好的測試支持此次發布的 0.3 版是 Blink 的一個主要發布版本,包含如下幾個新特性:1、插件架構
  • laravel高性能地從mysql資料庫中隨機獲取n條數據
    laravel如何高性能地從mysql資料庫中隨機獲取n條數據,有時候我們常常會需要從資料庫隨機獲取數據,比如:給工作人員隨機分配10個訂單,隨機從資料庫中隨機抽查100個用戶;這樣我們就需要隨機從資料庫獲取數據。
  • 消息中間件你該了解的秘密
    1.前言你知道的系統開發過程中會使用消息中間件進行消息的異步處理、系統之間解耦、系統流量削峰。在使用消息中間件的過程中我們需要了解以下場景:如何與我們的開發框架SpringBoot進行集成如何發送消息如何發送複雜消息如何保證發送消息的可靠性如何消費消息如何保證消費消息的可靠性如何保證消費者的可擴展性如何使用消費者進行流量削峰以這些場景為基礎開啟本文的寫作,本文是消息中間件RabbitMQ為例2.
  • 為什麼民謠吉他在國內被稱作「野路子」?
    在國內民謠吉他圈子裡面,不乏有一些人認為民謠吉他是「野路子」,為什麼被稱作野路子,我來談以下幾點原因:1、民謠吉他走的是速成路線,不需要學習什麼樂理(樂理包括旋律、節奏、和聲),旋律、和聲完全不需要學,只需要懂得節奏裡面的4分、8分和16分音符就可以玩吉他了
  • 紅人館 | 國漫女主角,人美路子野
    是什麼樣的人設,能讓一個女孩擔起「人美路子野」五個字?這真要從國漫女主角的人設有多精彩說起,她們早已脫胎換骨。最具象的就是能打,還都是野路子。「是誰盼我驚豔又要漫長,身懷寶藏又替我選遺忘。」這兩句形象地形容了馮寶寶的獨特。在《一人之下》的世界觀裡,世界上有普通人也有異人(天賦異稟之人),異人練功需要「炁」,而馮寶寶身上就有源源不斷的「炁」。她練功也不修行任何門派招式,「靜下來炁就在身體自己轉。」她覺得這就像農夫在地裡插秧一樣,取名「老農功」。《一人之下》裡,能牽制馮寶寶的人屈指可數。
  • 華為路由真雙頻體驗:100ms內無縫切換無卡頓
    自2017年9月,華為路由WS5100上市,華為打出了「真雙頻」的概念,可以說真雙頻是華為路由WS5100、華為路由WS5200等一系列路由器的成為爆品熱銷的主要原因。雙頻路由器目前已經是消費者選購路由器的基本選擇。是什麼原因觸發華為路由推出真雙頻系列呢?真雙頻能為消費者帶來哪些體驗優勢呢?今天咱就聚焦這一個點好好跟大家聊一聊!
  • 社會我寶姐,人美路子野
    社會我寶姐,人美路子野。 一念之差張靈玉:有時候還真得承認, 人不要臉更輕鬆些, 這東西大概是天分吧。
  • 舅舅「野路子」帶娃火了,為打遊戲「封印」外甥女,媽媽哭笑不得
    舅舅帶娃路子有多野?為打遊戲「封印」外甥女,寶媽好氣又好笑小劉是一個非常要強的女性,就連自己的丈夫都是在工作當中認識的,在結婚後,小劉依舊沒有更改自己要強的性子,哪怕是懷孕了依舊在自己的工作崗位中奮鬥,整個孕期,小劉也只是休息了兩個月的時間就會到了自己的工作崗位上。
  • 雲原生中間件領先實踐,輕舟中間件三大案例分析
    相較傳統中間件,雲原生中間件更能為企業解決SLA保障難、運維難、成本高等一系列問題。然而,中間件技術棧複雜,對專業程度要求高,如果缺少生產環境的大規模實踐,往往難以落地。作為雲原生中間件的長期實踐者,輕舟中間件經過可靠性、可擴展性、性能及穩定性測試,已歷經網易嚴選、網易雲音樂、網易傳媒等眾多大規模、高性能業務的生產環境實戰驗證。
  • 啄木鳥不斷襲擊幼崽,並敲開頭骨「吸食腦髓」,路子就是這麼野!
    啄木鳥不斷襲擊幼崽,並敲開頭骨「吸食腦髓」,路子就是這麼野!近日國外一位攝影師就拍下了罕見一幕,一隻成年啄木鳥不停地啄巢中的幼鳥,這隻啄木鳥用自己尖銳的喙啄開幼鳥的頭骨,隨後蠶食了幼鳥的腦子,沒幾分鐘完全沒有還手之力的幼鳥便被活活的啄死。
  • 計算機中間件市場前瞻分析
    包 含中間件在內的軟體基礎平臺用於業務邏輯所在的應用伺服器,按照應用伺服器佔伺服器 一半數量,則中間件在內的軟體基礎平臺每年約 125 萬套的需求,寶蘭德招股說明書中 披露中間件單價為 5 萬元,則未來整個潛在的市場空間 625 億元。1.3.
  • Dota2:「野路子」輔助再登場,A杖火槍常見,但A杖露娜什麼鬼?
    那麼本期遊戲日報肉山魔王就帶大家看看還有哪些「野路子」的輔助英雄吧。斧王在最近的版本中,斧王被削得較為嚴重。相比一些強勢的3號位,斧王在這個位置明顯有點拉胯。所以一些熱愛斧王的玩家就想出一些「野路子」,準備玩一玩醬油斧王。
  • 為完成娃的「奇葩作業」,這屆爸媽路子有多野?二胎都不小心懷啦
    一、為完成娃的作業,這屆爸媽路子有多野作為家長,一到下班時間最頭疼的事情就是給娃輔導作業。原本想著,結束工作後能夠在家好好的吃吃飯喝喝茶,結果陪孩子寫完作業,時間基本上已經被耗得差不多,而且心情也低到谷底。
  • Loadrunner測試消息中間件IBM WebSphere MQ
    一.什麼是中間件? 中間件是一種獨立的系統軟體或服務程序,分布式應用軟體藉助這種軟體在不同的技術之間共享資源。中間件位於客戶機/ 伺服器的作業系統之上,管理計算機資源和網絡通訊。是連接兩個獨立應用程式或獨立系統的軟體。相連接的系統,即使它們具有不同的接口,但通過中間件相互之間仍能交換信息。
  • 《一人之下》社會我寶姐,人美路子野 你喜歡寶兒姐哪一面?
    社會我寶姐,人美路子野。而我們的寶兒姐從出場開始就造型各異,你喜歡寶兒姐哪一面?社會我寶姐出場的時候穿的那一身民國半身裙,知性優雅。雖然寶兒姐一臉呆呆的表情可,是看看寶兒姐顏值,絕對是當時的美人胚子啊!
  • 小說推薦:5本女生向好看的甜文 女主顏高妖豔路子野
    開什麼玩笑,要真有後臺她怎麼不知道?萬萬沒想到的是——她膽大包天潛的那位竟是自己公司的幕後老闆,富春城大家族霍家的繼承人,神秘低調的霍四少,霍斯衡。木鶴懵了:原來……真的有後臺啊?她一直以為自己靠美貌和實力來著。
  • 巴圖魯野路子幹翻廣汽正規軍!
    今日熱點巴圖魯又融1億美金了,折合人民幣就是超6億元,這離去年B輪1億融資1年還不到,似乎預示著汽配電商領域又一獨角獸公司的崛起,相對廣州同城的大聖車服,雖背靠廣汽集團,但截至到2017年4月還在曬百萬註冊用戶數據,真有一種野路子巴圖魯幹翻廣汽正規軍的感覺。
  • 美院教授:什麼樣的字算是「野路子」?學書法如何才能不踩雷?
    在書法上也是如此,你對於書法技法的領悟程度決定了你是「正路子」還是「野路子」,但恰恰是這基本的一關,很多人用了幾十年的功夫,仍舊沒有越過!有一位美院教授,總結除了一般的「野路子」書法的以下幾種表現,看官可以對比下自己,有沒有中招?第一:不臨帖書法是有「法度」的,不是靠著自己的審美將字寫好看才算好書法。
  • 長城取名的路子越來越野了,白貓黑貓,又來一隻好貓
    長城給汽車取名的路子是越來越野了,大狗、坦克、白貓、黑貓這些還不過癮,馬上又有一款名叫好貓的純電車型上市。不管是黑貓白貓,能抓住耗子的就是好貓,從這三種貓的關係來看,好貓的市場定位要更高一些。
  • 新路由3「省網費」功能實測體驗!
    接下來,對新路由3後臺功能界面進行瀏覽。路由狀態形象化展示,入網設備智能限速,數十款拓展插件豐富實用,總體來說,作為一款路由器,新路由3具有完備的基礎管理功能。在對新路由3的配置及功能體驗過程中,可以感受到,新一代智能路由器和傳統路由器在操作的簡捷性、功能的豐富實用性等方面展現出的巨大差異。下面,筆者將針對新路由3的信號發射能力做一個簡單測試,看看這所謂的新一代智能路由器是否會有遠超傳統路由器的性能表現。以下是本次測試環境:面積100平米的三居室,總共使用了1臺ipad和3臺手機。