在開發(fā)應用程序時選擇使用哪個框架桶至,這將取決于很多因素。和其它任何應用程序框架一樣匾旭,Laravel框架也有其優(yōu)缺點镣屹。撇開那些令人憎惡的缺點不談,這篇文章我們將把重點放在使用Laravel框架的優(yōu)點上价涝。
我們開始討論Laravel的神奇之處女蜈,而不使用已有的框架,自己開發(fā)構建一個應用程序所需一切的潛在風險是什么色瘩?不使用框架來構建應用程序有什么問題伪窖?為了理解在不使用框架的情況下開發(fā)一個應用程序的潛在風險,讓我們假設居兆,我們必須構建一個使用MVC(模型-視圖-控制器)架構模式的應用程序覆山。
當你開始設置架構時,我們需要根據應用程序的結構泥栖,從很多種架構模式中做出合適的選擇簇宽。當我想到如果我自己需要開發(fā)一套完整的應用程序體系架構時勋篓,我馬上想到了幾個問題。
首先魏割,我應該從應用程序的哪個組件開始著手處理呢生巡?是先安裝所有的第三方依賴項和庫嗎?從應用程序的可擴展性來考慮见妒,我應該使用什么樣的模型類(model class)庫來和數據庫進行交互?是使用PDO類呢孤荣,還是有更好的選擇?
我將如何管理依賴注入须揣?考慮到后期會有更多的開發(fā)人員在同一個應用程序上工作盐股,我應該如何對這個體系結構做一個完整的記錄?
這些問題看起來很難回答耻卡,但是我想告訴你這些僅僅是個開始疯汁。
很明顯,如果你不是一個熟悉MVC體系架構的編程者卵酪,那么這些問題本身對你來說都是新問題幌蚊。如果你以前沒有使用過任何框架,你可能從來沒有問過這些問題溃卡。如果是這樣的話溢豆,那么這個理由本身就足以讓你采用Laravel框架進行應用程序開發(fā)。
Laravel框架將為你處理所有這些低級的細節(jié)瘸羡,并為你提供一個簡潔和實用的架構模式漩仙。同時,Laravel框架將為你處理模型犹赖、視圖和控制器之間的無縫交互队他。
并且還將為你提供許多內置在框架中的不同功能,以便你可以專注于編寫應用程序的業(yè)務邏輯峻村。
最終麸折,你因為不必花費時間尋找這些低級問題的解決方法,而節(jié)省大量的時間和精力粘昨。
框架提供了一致性和靈活性讓我們試著想象一下這樣一種情形:你正在開發(fā)一個龐大的應用程序垢啼,但是沒有使用任何現(xiàn)成的框架或者使用自己構建的框架。當用戶數量增加或需要添加更多功能時雾棺,你將需要更多的開發(fā)人員來開發(fā)和維護這個應用程序膊夹。
在新開發(fā)人員入職期間,你除了向他們介紹你的開發(fā)團隊需要遵循的軟件開發(fā)的所有流程步驟和方法之外捌浩,你還必須向他們講解你所構建的整個應用程序結構放刨。由于這個原因,新的開發(fā)人員必須通過一個高的學習曲線來理解你開發(fā)的新體系結構尸饺。
但是如果你使用Laravel框架进统,這類問題將不復存在助币,因為這個框架會帶給你應用程序開發(fā)的一致性。Laravel框架有詳細的文檔螟碎,新開發(fā)人員不必經歷使用新框架的學習過程眉菱。
因為你可以很容易地聘請到一個熟悉Laravel框架的開發(fā)人員,并能讓他很快開始工作掉分。當一個團隊使用標準化框架(比如Laravel)來構建應用程序時俭缓,向團隊中添加其他開發(fā)人員就會變得很容易。
這是因為:當你雇傭了一個熟悉Laravel框架的開發(fā)人員酥郭,他能夠理解這些代碼华坦,因為所有代碼都遵循相同的模式。
使用Laravel框架的好處如果上面這些聽起來已經很有趣不从,并且足以鼓勵你在你開發(fā)下一個應用程序時使用框架惜姐,那么接下來讓我分享一下Laravel框架相對于其它PHP框架所具有的一些優(yōu)勢。
這些優(yōu)勢無疑使Laravel框架成為最佳PHP框架的主要競爭者之一椿息。
1.開箱即用的用戶身份驗證Laravel框架提供了開箱即用的用戶身份驗證功能歹袁。
任何現(xiàn)代的web應用程序都需要用戶身份驗證,使用Laravel框架寝优,你幾乎不需要做任何事情就可以將它設置好条舔。
當你設置用戶身份驗證時,Laravel框架會創(chuàng)建所有重要的組件倡勇,如用戶模型逞刷、注冊和登錄控制器,以及相應的視圖妻熊。
而且在將來,根據應用程序所需的業(yè)務邏輯仑最,將這些組件擴展到新添加的功能上也是非常容易的扔役。
除此之外,Laravel框架還提供了Socialite package(擴展包)警医,它使你的應用程序能夠使用各種社交網絡(如Facebook, Google Plus和Twitter)對用戶進行身份驗證亿胸。
要使它工作正常,你只需進行最低限度的配置预皇。
2. 約定優(yōu)于配置(也稱作按約定編程)Laravel框架同樣采用“約定優(yōu)于配置”的方法侈玄。
這基本上意味著,如果遵循了不同組件的命名約定吟温,就幾乎不必關注配置工作序仙。
如果你遵循了命名約定,Laravel框架自身就會幫你處理許多低級的細節(jié)鲁豪,而且一切都會神奇地開始工作潘悼。
如果你一直使用傳統(tǒng)的PHP編程律秃,這在一開始可能會讓您感到難以忍受。
但一旦你嘗到了甜頭治唤,你就再也不想回頭了棒动。
3.輕松使用的電子郵件功能很難想象一個現(xiàn)代的應用程序會沒有電子郵件功能。
使用Laravel框架,實現(xiàn)電子郵件發(fā)送功能非常容易宾添。
除了SMTP和Php郵件功能外船惨,Laravel框架還支持各種各樣的電子郵件通知服務,如Mailgun缕陕,Mandrill粱锐,SparkPost,Amazon SES榄檬,SendMail等等卜范。
這些服務可以使你能夠快速開始通過本地或基于云的服務發(fā)送郵件。
你還可以使用Nexmo通過Slack和SMS發(fā)送通知鹿榜。
所有這些服務在Laravel框架中都是開箱即用的海雪。
Laravel框架還在電子郵件模板中支持Markdown
(譯者注:Markdown是一個文本到HTML(text-to-HTML)的轉換工具),
它能夠使你在很少的時間內完成電子郵件的創(chuàng)建工作舱殿。
4.Artisan命令
對我個人而言奥裸,Artisan命令行是Laravel框架提供的最簡練和最有用的功能。
Artisan是Laravel框架的命令行接口沪袭,它幫助開發(fā)人員使用命令行本身自動化許多任務湾宙。
Artisan命令可以在應用程序本身中使用,開發(fā)人員也可以創(chuàng)建額外的Artisan命令冈绊。
你能夠想到的所有常見任務侠鳄,都能找到一個Artisan命令與之對應。
例如死宣,創(chuàng)建一個模型伟恶、創(chuàng)建一個控制器、創(chuàng)建一個數據庫種子毅该、遷移數據庫等等博秫。
這個列表是無窮無盡的。
我之所以說它“簡練”眶掌,是因為你所要做的就是傳遞命令挡育,剩下的工作全交給Laravel框架來處理。
5.“測試驅動開發(fā)”
“測試驅動開發(fā)”的測試自動化Laravel框架自帶對PHPUnit的支持朴爬,使得采用“測試驅動開發(fā)”模式的PHP應用程序的測試變得非常容易即寒。
為應用程序編寫單元測試變得很簡單,而且確保事情按照你希望的方式進行。
6.簡潔的依賴注入
一旦你開始使用Laravel框架工作蒿叠,你很快就會意識到Laravel框架是從Ruby on Rails和更多的函數式語言中獲得的靈感明垢,而不是從Java。
這一點從Laravel框架處理依賴注入的方式就可以輕易地看出這一點市咽。
盡管實現(xiàn)依賴注入可以采取復雜的模式痊银,但Laravel框架采取的做法與之相反,它提供了創(chuàng)建全局助手函數的簡單方法施绎。
借助于全局函數和Faade靜態(tài)代理溯革,我們就可以在任何需要的地方輕松地實現(xiàn)依賴注入。
7.業(yè)務邏輯和顯示代碼的分離
Laravel遵循模型-視圖-控制器(MVC)架構模式谷醉,將業(yè)務邏輯與視圖分離致稀。
這種方法有很多優(yōu)點。
而要真正了解它優(yōu)點俱尼,你需要了解什么是MVC模式抖单,以及你的應用程序是否需要這樣的體系架構。
8. Eloquent ORM
Eloquent ORM(對象關系映射)實現(xiàn)Eloquent是Laravel提供的ORM(對象關系映射)實現(xiàn)遇八。
Eloquent使得從數據庫中獲取數據變得非常容易矛绘。
創(chuàng)建表之間的關系并從這些表中獲取數據也變得很簡單。
Eloquent還允許你在表中創(chuàng)建各種連接刃永,并提供許多幫助函數货矮,使與數據庫的交互變得非常簡單。
你幾乎不必編寫SQL查詢語句或函數斯够。
因為有了Eloquent ORM囚玫,Laravel框架就可以為下面這些數據庫提供開箱即用的支持:MySQLPostgreSQLSQLiteSQL Server你真是說對了,這基本上意味著只要你使用Eloquent读规,你就不必擔心與上述任何數據庫的兼容性抓督。
從一個數據庫切換到另一個數據庫也非常容易。
現(xiàn)在試著想象一下這給你的應用程序帶來的可擴展性束亏,不妨讓我用一個例子來解釋這一點本昏。
假設你有一個應用程序,這個應用程序在開始時有一個很小的用戶群枪汪。由于用戶數量較小且應用程序處于初始階段,因此你決定使用MySQL作為數據庫怔昨。一段時間過后雀久,你的應用程序的用戶數量增長到了相當高的級別,現(xiàn)在你可能需要切換到SQL Server數據庫趁舀。因為使用了Eloquent赖捌,這個切換現(xiàn)在變得非常簡單,就像更改Laravel框架中的特定配置詳細信息一樣容易。
9.隊列(Queue)和調度器(Scheduler)
在開發(fā)應用程序時越庇,通常會有一些耗時的任務罩锐。
這些任務需要推遲到稍后的時間執(zhí)行,這樣它們就不會給用戶的流程造成阻塞卤唉。
這類任務的一個完美例子可能是生成一個統(tǒng)計用戶請求創(chuàng)建CSV文件的PDF報告涩惑。Laravel框架的隊列服務提供了一個統(tǒng)一的API,用于將這些任務推遲到應用程序的稍后時間處理桑驱。
談到Laravel框架的命令調度器竭恬,它是那些繁瑣的定時任務(Cronjob)的完美替代品。
在很多時候熬的,開發(fā)人員必須為特定的任務設置定時作業(yè)痊硕。
這種任務的一個完美例子是向所有訂閱用戶發(fā)送他們訂閱的每周簡訊(Newsletter)。
為了設置這個定時作業(yè)押框,開發(fā)人員必須使用SSH命令登錄到服務器并在操作系統(tǒng)級別設置這個定時作業(yè)岔绸。
這在一段時間內會成為一個麻煩,因為這些定時作業(yè)不能成為GIT和其它版本控制系統(tǒng)管理的一部分橡伞。
但是Laravel框架的命令調度器使用內置函數提供了一個干凈的API來調度各種各樣的任務盒揉。
這樣,你就不必使用SSH命令登錄到服務器的終端骑歹,并且所有這些被調度的作業(yè)都成為代碼的一部分而納入版本控制系統(tǒng)管理的范圍预烙。
10.簡潔的路由Laravel框架處理路由的方式簡單直觀。
有一個單一的web.php文件來處理所有的web路由道媚。
如果某些路由需要公共中間件扁掸,它們可以很容易地在Laravel中分組。
路由的一個完美的應用場景是:應用程序中的某些頁面最域,在用戶可以查看它們之前谴分,這些頁面需要用戶身份驗證。
Laravel框架可以將所有這些頁面分組镀脂,并且經過Auth中間件檢查牺蹄,以確保只有登錄到系統(tǒng)的用戶才能查看這些頁面。
Laravel框架還提供了一個簡潔的路由模型綁定(route model binding)薄翅,其中模型(model)可以綁定到路由沙兰。
有了這個幫助,視圖可以直接從路由本身返回翘魄,甚至不需要訪問控制器鼎天。
11. Composer管理依賴關系Laravel框架使用Composer管理依賴關系和自動加載。
Composer可以幫助你安裝Laravel擴展包暑竟,這使得依賴管理變得輕而易舉斋射。
在任何時候,你都可以檢查package.json文件來查看你的應用程序正在使用的所有依賴項。
Composer還讓你能夠使用單個Composer命令更新依賴項罗岖。
12.Blade模板引擎Blade是Laravel框架的模板引擎涧至。
Blade可以讓你在分離視圖和業(yè)務邏輯上領先一步。
它能讓你的視圖代碼保持非常干凈桑包。
一旦你對MVC架構模式和Laravel對它的實現(xiàn)有了清楚的了解南蓬,你就會更加清楚地認識到Blade模板引擎的重要性。
Blade還提供了模板繼承捡多,因此你可以將最近使用的模板劃分為多個部分蓖康,并讓其它視圖文件繼承這些部分。
有了Blade的幫助垒手,你就可以創(chuàng)建一些邏輯較小的視圖部分蒜焊,然后可以包含這些小的部分以形成完整的視圖。
13.文檔這是一個有點灰色的區(qū)域科贬。
當我最初開始使用Laravel框架的時候泳梆,我在查找文檔時確實遇到了問題。
當時所有的一切都沒有文檔榜掌,但是在某個時刻我突然發(fā)現(xiàn)有些事情開始神奇地工作优妙,那就是大家始遵循命名規(guī)范的那個時刻。
現(xiàn)在憎账,有一些API文檔列出了Laravel框架中聲明的每個類和方法套硼。
一旦你掌握了如何使用它,并且知道如何使用Laravel文檔來為你的利益服務胞皱,我保證你不會再有任何抱怨邪意。
14.活躍社區(qū)Laravel確實有一個活躍的社區(qū)。
當你遇到任何問題時反砌,你都可以搜索雾鬼,而且肯定會查到許多針對你的問題的帖子。
社區(qū)交流非常強大宴树,公眾號每天更新技術文章和最新咨詢策菜。
我認為這些優(yōu)勢足以讓你對Laravel框架感到興奮。
盡管把它定義為完美肯定是夸大其詞了酒贬,但我可以肯定的是又憨,Laravel框架絕對是最好的PHP框架之一。