在動態Web開發的早期,編寫一個Web應用看起來是很是不一樣和當今相比。開發者們不只要爲咱們的應用負責寫業務邏輯,並且還要爲整個應用或網站寫一些比較經常使用的組件,好比用戶認證、輸入校驗、數據庫訪問、模板等等。php
今天,開發者們有很是多的應用開發框架,上千個組件和容易獲取的類庫。程序員們也常常談論到:等到你學完一個框架的時候,多個新的(聽說也不錯)框架已經出來了,並且有取代以前框架的趨勢。程序員
"就由於它在那裏", 這也許是登山的正當理由,可是也有更好的理由選擇一個特定的框架或者徹底使用一個框架。web
有一個很是值得問的問題:數據庫
爲何要選擇框架? 更特別的是,爲何是Laravel?編程
很容易看出爲何使用單獨的組件或者包是有益的。對於這些包,其餘人負責去開發和維護這些明肯定義的獨立代碼。理論上那我的對這單個組件有時間去理解的更加深刻。緩存
像Laravel、Symfony、Silex、Lumen和Slim這些框架,都是經過預組裝一些第三方組件而作成的一個框架,好比像配置文件,服務提供者,目錄結構和應用啓動,固然各自方式有所不一樣。因此總體來說使用框架的好處就是:有人已經幫咱們作好了一個單獨的組件,同時也提供給咱們去如何使用的方法。服務器
讓咱們來講說,若是沒有框架的好處來新建一個web應用。閉包
首先,你從哪開始?好,你可能先須要一個HTTP請求的路由,因此你須要去調研全部可用的http請求和和響應類庫,而後選擇一個。路由選定以後,你也可能須要去設置某種形式的路由配置文件。那它應該使用什麼樣的語法呢?它又應該放在哪裏呢? 控制器呢?它們又放在哪裏?又是怎樣被加載? 你可能須要一個依賴注入容器去解決控制器和他們的依賴。 可是,用哪個呢?app
並且,若是你花時間解決了全部的問題,也成功的建立了一個應用,那麼這樣作對下一個開發者的影響呢?當你有3個這樣的自定義框架的應用,或者更多呢? 你必須去記住每個應用的控制器放在了哪裏?或者 路由語法是怎麼樣的? 等等。框架
在這裏咱們應該使用哪個組件? 框架其實已經對這個問題提供了一個深思熟慮的答案。而且框架能夠確保選擇的那些組件在一塊兒能夠很好的工做。另外框架也提供了一些規範,這些規範可使咱們去減小新人對項目代碼量的理解。若是你理解在一個Laravel項目中路由是如何工做的,那你也就理解了在全部Laravel項目中路由是如何工做的。
可能去回答"爲何是Laravel"這個問題一個重要的部分就是理解Laravel的歷史,理解以前發生了什麼。實際在Laravel流行以前,在PHP語言裏有很是多的框架,其餘web開發語言也是如此。
David Heinemeier Hansson 在2004年發佈了第一個Ruby on Rails版本,而在那時也很難找到一個web應用開發框架,這在某種程度上沒有受到Raisl的影響。
Rails推廣MVC, RESTful JSON API,約定優於配置,ActiveRecord,以及其餘不少的工具和約定,而這些工具和約定對Web開發人員接近他們的應用程序的方式產生了深遠的影響,特別是在快速應用開發方面。
大多數開發人員很清楚,Rails和相似的Web應用程序框架是將來的潮流,PHP框架,包括那些被公認爲模板Rails的框架,開始迅速出現。 CakePHP是2005年第一個出現的,不久以後,Symfony、CodeIgniter、Zend Framework和Kohana(CodeIgniter的一個分支)接着發佈了。Yii 在2008年出現的,Slim在2010出現。在2011 FuelPHP和Laravel也出現了,二者都不是很完美,可是能夠做爲替代方案。
其中一些框架更像是Rails, 側重於數據庫對象ORM, MVC結構和其餘快速開發的工具。而另外一些框架,好比Symfony和Zend, 則更多的關於企業設計方案和電子商務。
CakePHP和CodeIgniter是兩個比較早的PHP框架,他們的靈感或多或少來自於Rails。CodeIgniter的名氣快速上升,到2010年能夠說是最受歡迎的PHP框架。
CodeIgniter簡單易用, 而且擁有使人驚歎的文檔和一個強大的社區。但其對現代技術和先進模式使用比較緩慢,隨着框架世界的發展和PHP工具的進步,CodeIgniter開始在先進技術和開箱即用功能方面落後於後者。與許多其餘框架不一樣,CodeIgniter是由一家公司管理,他們很難遇上PHP5.3的新功能,好比命名空間以及遷移到Github和後來的Composer。在2010年,Laravel的創始人Taylor Otwell對使用CodeIgniter 感到不知足,因此開始編寫本身的框架。
Laravel 1 的第一個beta版是在2011年6月發佈,徹底從頭開始寫起。 功能主要專一於自定義的ORM(Eloquent), 基於閉包的路由, 一個擴展模塊系統, 對於表單的驗證, 認證助手等等。
早期Laravel的發展迅速,Laravel2和3分別在2011年11月和2012年2月發佈。它們包含的功能有:控制器,單元測試,命令行工具,控制反轉(IoC)容器, Eloquent關係和遷移。
對於Laravel4, Taylor從頭開始重寫了整個框架。那時Composer,一個先進的包管理工具,正在顯示出成爲行業標註的跡象,Taylor看到了將框架重寫爲組件集合,由Composer分發和捆綁在一塊兒的價值。
Taylor以代碼Illuminate
命名下開發了一系列的組件,,在2013年5月,以全新的結構發佈了Laravel4。而不是捆綁大部分代碼做爲下載,Laravel如今從Symfony(另外一個發佈組件供其餘組件使用的框架)和Illuminate組件經過Composer拉取大部分組件。
Laravel4還引入了隊列,郵件組件,facades和數據庫遷移。因爲Laravel如今還依賴於Symfony組件,因此它宣佈Laravel將反映Symfony隨後六個月的發版計劃。
Laravel 4.3是計劃於2014年11月發佈,但隨着開發的進展,顯然其變化的重要性值得一個重大發布,因此Laravel 5於2015年2月發佈了。Laravel 5改進了目錄結構,刪除了表單和HTML助手,引入Contract
接口,大量新試圖,Socialte
社交化媒體認證,用於資源編譯的Elixir
, 用於簡化Cron
的調度程序,用於簡化環境管理的.env
,還有表單請求和全新的REPL(read-evaluate-print loop).
那麼Laravel的不一樣之處是什麼呢?爲何不管如何它比其餘框架更值得去擁有? 由於它們全部的組件來自Symfony, 對吧?讓咱們來了解一下,什麼使Laravel如此特別。
你只須要閱讀Laravel的推廣資料和README就能夠看到其存在的價值。Taylor喜歡使用光照相關的詞來形容他的做品,好比Illuminate
, Spark
。
這個框架最值得傳播的兩個價值就是 提升開發者的速度 和 開發者的幸福感。Laravel的核心是提供更好的裝備來支持開發人員。其目標是提供清晰,簡單,優美的代碼和功能,幫助開發人員快速學習,開始和開發,編寫簡單、清晰且持久的代碼。
針對開發人員的概念在Laravel官方材料中已經很明顯。文檔中寫着:讓開發者能夠開心的寫出最好的代碼。 開發者從下載到部署都是快樂的 是那一段時間的非官方口號。
固然,任何工具或框架都說喜歡讓開發人員感到快樂。但將開發者的幸福感做爲主要關注點,而不是次要的,對Laravel的風格和決策進程產生了巨大的影響。在其餘框架可能把建築純度做爲他們的主要目標,或者與企業開發團隊的目標和價值兼容的狀況下,Laravel主要的關注點是服務於我的開發者。
剛剛說的讓開發者快樂是一件事,作就是另外一回事了,試問本身:在一個框架裏最可能讓咱們感到不快樂的事情是什麼,什麼又最可能讓咱們感到快樂?Laravel試圖讓開發人員的生活更輕鬆。
首頁,Laravel是一個快速應用開發框架。這也意味着它專一於一個簡單的學習曲線和將開始一個應用到發佈之間的步驟最小化。這些都是構建一個web應用最多見的任務,從數據庫交互到認證、隊列,郵件,緩存,都經過Laravel提供的組件變得更簡單。Laravel的組件不只很棒,並且也提供了一致的API和可預測的結構。那也就意味着當你用Laravel寫一些新東西的時候,你可能最終會說,它正常工做。
還不以這個框架結束,另外Laravel還提供了一個完整的生態系統用於構建和啓動應用的工具。你能夠用Homestead
和Valet
作本地開發,用Forge
作服務器管理,Envoyer
進行高級部署。還有一些額外的組件包:Cashier
爲作支付和訂閱,Echo
用做WebSocket, Souct
用做搜索, Passport
用做API認證,Socialite
用做社會化登陸,Spark
用做引導你的Sass。 Laravel嘗試去作開發人員重複的工做,以便於他們能夠去作其餘的事情。
其次,Laravel專一於約定高於配置
, 意思就是若是你願意去使用Laravel的一些默認配置,你也能夠少作不少工做相比去其餘你須要去定義全部配置,甚至你使用推薦配置的框架。構建在Laravel上的框架花費更少的時間比構建在其餘大多數的PHP框架。
Laravel深度關注簡單性。 用Laravel若是你願意,使用依賴注入,mokc,數據映射模式,repository, 命令行查詢,更復雜的結構查詢都是可能的。可是其餘的框架可能會建議每一個項目使用這些工具和結構,而Laravel和它的文檔以及社區更傾向於以最簡單的實現開始,好比全局函數,facade,ActiveRecord等。這也就容許開發者們去建立最簡單的應用以知足他們的需求。
Laravel不同凡響的一個有趣來源是其建立者和社區是與Ruyb和Rails以及函數式編程語言相比,更多地與Java相關,而且受其啓發。現代PHP中又一個強大的趨勢是傾向於繁瑣和負責,包含了更多的Java特性。但Laravel傾向於另外一面,包含表達式,動態性和簡單的面向實踐和語言特徵。
若是該系列是你第一次接觸到Laravel社區,那麼你有一些特別的期待。Laravel一個突出特色是促進了它的發展和成功。從Jeffrey Way的Laracasts視頻教程到Laravel News到Slack和IRC頻道,從twitter到博主,到Laracon會議,Laravel都有一個充滿活力的社區。
Taylor 從Laravel 早期就理解到,一個成功的開源項目須要兩件事:好的文檔和一個受歡迎的社區。這兩件事情Laravel都作到了。
到目前爲止,這裏所說的一切整個都比較抽象。你可能會問,代碼怎麼樣? 讓咱們來一塊兒看一個簡單的應用,以便你能看到Laravel實際是如何工做的。
// File: routes/web.php <?php Route::get('/', function(){ return 'Hello, World!'; }) ?>
在Laravel應用中你能作的最簡單的動做就是定義一個路由,而後返回一個結果,當有人經過那個路由訪問的時候。 若是你在你本身的機器上初始化了一個Laravel應用,定義上面的路由,那你能夠在public目錄裏啓動你的站點,而後本身訪問。訪問結果就是
Hello World!
看起來是否是相似於控制器? 來看下控制器是怎麼實現的
// routes/web.php <?php Route::get('/','WelcomeController@index'); // app/Http/Controllers/WelcomeController.php <?php namespace app\Http\Controllers; class WelcomeController { public function index() { return 'Hello, World!'; } }
因此,說了這麼多,知道爲何是Laravel了吧?
由於Laravel能夠幫助你將你的想法變爲現實,並且不會浪費代碼,使用現代編碼標準,由充滿活力的社區所包圍,而且擁有強大的工具生態系統。
因此做爲開發者的咱們,應該感到高興。 不是嗎?^_^