Laravel 學習筆記——路由(路由與控制器)

原文地址:http://www.insp.top/article/10

目前我們大致了解了laravel下糜烹,在開始一個Http程序需要先定義路由龄砰。之前的例子中立帖,我們的業(yè)務邏輯都是在路由里實現(xiàn)咐容,這對于簡單的網(wǎng)站或web應用沒什么問題栅螟,當我們需要擴大規(guī)模,程序變得復雜徐钠,分層的業(yè)務邏輯更為適合癌刽。這時候,我們就應該使用控制器。

了解MVC的都對控制器的作用有所了解显拜,控制器是實現(xiàn)主要業(yè)務邏輯的衡奥。在其他框架,控制器一般就是一個類远荠,laravel也不例外矮固,laravel的控制其結構并沒有什么特殊。


上述例子中就是laravel的控制器結構譬淳,沒什么特別的档址。可以看得到瘦赫,Laravel的控制器非常的干凈辰晕,與其他類的耦合度相當?shù)牡透蛴5靡嬗趌aravel的IoC容器确虱,我們很容易實現(xiàn)相當豐富的功能,且不會產生緊密耦合替裆。那么如何才能訪問到這個控制器里的邏輯呢校辩?

我們所知道的許多框架,通常有著既定的路由規(guī)則辆童,我個人比較熟悉TP宜咒,TP的默認路由規(guī)則是http://yourdomain/Module/Controller/Action,假如我們訪問http://yourdomain/Content/Home/index把鉴,默認會將請求派發(fā)至Content模塊下的HomeController類的index方法故黑。

ThinkPHP這種默認路由規(guī)則使得框架開箱即用,十分便捷庭砍。但是這樣并不靈活场晶,假如我想通過訪問http://yourdomain/user/1就訪問到UserController控制器下的show方法并包含一個值為1的參數(shù),ThinkPHP你需要修改配置(并且那個配置非常不優(yōu)雅)怠缸,亦或者我想要通過向http://yourdomain/topicPOST一個數(shù)據(jù)以添加一篇文章诗轻,處理這個過程的實際是Admin\TopicController類的create方法,且該方法只接受POST請求揭北,這時候似乎大多數(shù)框架就要通過寫更多的代碼實現(xiàn)了扳炬。

說到這里,似乎大家是不是想起了laravel那種路由定義方式的好處了搔体?雖然laravel沒有強加給你既定的路由規(guī)則恨樟,但你擁有了更多定制的權利,并且laravel定義路由的方式非常優(yōu)雅疚俱,帶給你的體驗非常豐富劝术。另一個好消息是,定義控制器路由和普通路由有所差別,這個差別是在便利性上的夯尽,你將很快感受到這種便利帶給你的好處瞧壮!

說到現(xiàn)在,已經積累了很多疑惑匙握,我們現(xiàn)在開始正式講述laravel的控制器與控制器路由咆槽。

控制器路由#

我們之前代碼示例中,看到了一個十分簡單的控制器圈纺,但是要知道秦忿,定義了控制器你是無法直接使用的,要知道一個來自客戶端的請求會經過路由蛾娶,經過解析最終按照規(guī)則派發(fā)至具體的處理邏輯灯谣。

我們知道如何定義一個路由,但之前的路由里包含了邏輯蛔琅,我們如何將這個路由的邏輯轉到控制器呢胎许?我們希望通過http://yourdomain/訪問到我們上面例子中的HomeController類的index方法,應該這樣定義一條路由:


例子很簡單罗售。但是這種定義方法會帶來一種問題辜窑。

關于laravel的路由定義,很多人看到后有一個疑惑:

每條地址規(guī)則都要定義路由寨躁,豈不是很累穆碎?

這個問題確實是個問題,不過职恳,laravel給了我們一個折中的方案——控制器路由所禀。

控制器路由我認為主要是解決路由定義繁雜的情況,因為大型的應用業(yè)務復雜放钦,控制器相當?shù)亩嗌牵覀儾豢赡苊恳粋€控制器的方法都要定義一個路由。Laravel的控制器路由可以完美解決問題:


我們的控制器方法的寫法也要有所變化:

依照上述例子最筒,如果我們訪問地址http://yourdomain/就會顯示HomeController的getIndex方法產生的內容贺氓,訪問http://yourdomain/about,就會顯示getAbout方法產生的內容床蜘。除了使用如get{Method}這種格式辙培,還可以有post{Method}、delete{Method}等邢锯,至于前綴get扬蕊,post等代表的意義,應該猜得出吧丹擎?

相關部分尾抑,官方文檔已經很詳細寫出歇父。可以繼續(xù)去了解再愈,上述內容屬于控制器章節(jié)的隱式控制器榜苫。

現(xiàn)在我們已經看到,這樣的定義我們可以不用再給控制器的每一個方法定義一個路由翎冲,只需給控制器定義一個路由即可垂睬。

資源控制器#

RESTful是一種設計思想、一種普遍接受的規(guī)范抗悍。我們的資源控制器驹饺,和RESTful有著莫大的聯(lián)系,要理解資源控制器缴渊,必須先了解RESTful赏壹。


Laravel的資源控制器原生的支持了RESTful架構。其實laravel的資源控制器和其他控制器沒什么直接區(qū)別衔沼,只是對控制器類的方法和結構略有規(guī)定蝌借,不過我們并不要手動創(chuàng)建資源控制器,我們可以利用laravel的命令行工具——artisan俐巴。

在laravel框架根目錄下骨望,通過命令行輸入命令

就可以創(chuàng)建一個名為ArticleController的資源控制器硬爆,文件默認在app/Http/Controllers下欣舵。我們打開ArticleController.php,發(fā)現(xiàn)里面已經寫好了許多方法缀磕,比如index缘圈、create、show等等袜蚕。分別是什么意思糟把?如何在路由定義才能訪問到?

我們如果要在路由里定義一個資源控制器只需要一條:

這個時候牲剃,肯定有人會疑惑遣疯,那訪問的地址規(guī)則呢?如果你已經了解了RESTful凿傅,再去閱讀以下官方文檔缠犀,基本就已經明白了。我就著上述的控制器聪舒、路由辨液,來說明。先看一張表:

請求方法請求URI對應的控制器方法代表的意義


大概挑兩條解釋箱残。

我定義了個資源路由Route::resource('article', 'ArticleController');滔迈。

當我訪問地址http://yourdomain/article止吁,相當于訪問控制器ArticleController的index方法。

當我訪問地址http://yourdomain/article/create燎悍,就會訪問到create方法敬惦。

當我通過POST提交數(shù)據(jù)至地址http://yourdomain/article,相當于由store方法處理谈山。

現(xiàn)在理解了嗎仁热?通過資源控制器,我們很容易實現(xiàn)一個符合RESTful架構的接口勾哩,這種很適合作為APP后端開發(fā)時使用抗蠢。這種規(guī)范下,不但訪問策略清晰易理解思劳,更容易維護迅矛。也使你的架構更為合理和現(xiàn)代化。

當然潜叛,復雜的業(yè)務邏輯使得資源控制器還不僅僅這么使用秽褒,但當你理解了這種最為基本的,其他的也不會太難威兜。文檔中對控制器的其他部分做出相當詳細的描寫销斟,本著作為文檔的補充,這些文檔中已經存在且足夠理解的椒舵,就不再復述蚂踊。

我會在以后針對不足的地方補充。謝謝觀看笔宿。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末犁钟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子泼橘,更是在濱河造成了極大的恐慌涝动,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炬灭,死亡現(xiàn)場離奇詭異醋粟,居然都是意外死亡,警方通過查閱死者的電腦和手機重归,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門米愿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人提前,你說我怎么就攤上這事吗货。” “怎么了狈网?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵宙搬,是天一觀的道長笨腥。 經常有香客問我,道長勇垛,這世上最難降的妖魔是什么脖母? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮闲孤,結果婚禮上谆级,老公的妹妹穿的比我還像新娘。我一直安慰自己讼积,他們只是感情好肥照,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著勤众,像睡著了一般舆绎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上们颜,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天吕朵,我揣著相機與錄音,去河邊找鬼窥突。 笑死努溃,一個胖子當著我的面吹牛,可吹牛的內容都是我干的阻问。 我是一名探鬼主播梧税,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼则拷!你這毒婦竟也來了贡蓖?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤煌茬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后彻桃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坛善,經...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年邻眷,在試婚紗的時候發(fā)現(xiàn)自己被綠了眠屎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡肆饶,死狀恐怖改衩,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情驯镊,我是刑警寧澤葫督,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布竭鞍,位于F島的核電站,受9級特大地震影響橄镜,放射性物質發(fā)生泄漏偎快。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一洽胶、第九天 我趴在偏房一處隱蔽的房頂上張望晒夹。 院中可真熱鬧,春花似錦姊氓、人聲如沸丐怯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽响逢。三九已至,卻和暖如春棕孙,著一層夾襖步出監(jiān)牢的瞬間舔亭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工蟀俊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留钦铺,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓肢预,卻偏偏與公主長得像矛洞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子烫映,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理沼本,服務發(fā)現(xiàn),斷路器锭沟,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • 介紹 不要把所有處理請求的邏輯都放到一個單獨的 routes.php 文件里抽兆,我們可以使用控制器去組織這些行為。C...
    伊Summer閱讀 803評論 0 1
  • 本文轉自CSDN族淮,在原作者基礎上將老版本laravel的目錄更正為最新laravel5.4目錄辫红,去除了不太好理解的...
    小小奶狗閱讀 2,018評論 6 10
  • 0.1配置1.模板繼承2.控制器3.git4.支付寶支付的流程5.路由6.中間件7.請求8.laravel 學習筆...
    云龍789閱讀 806評論 0 5
  • 周一的上班天贴妻,我和往常一樣等著七點半的地鐵去上班,耳機里播放著周董的“彩虹”蝙斜,在車里拿著手機刷著朋友圈名惩,使我...
    慢半拍小姐閱讀 488評論 0 0