本書從基礎開始詳細地講解了Laravel開發框架。本書對Laravel框架進行了系統的介紹,包括Laravel的背景、Laravel開發環境的搭建、路由與控制器、Blade模板、前端組件、收集和處理用戶數據、Artisan和Tinker、數據庫和Eloquent、容器、Laravel測試等知識。通過閱讀本書,讀者可以比較全面地學習并掌握Laravel開發的相關理論知識。另外,書中涵蓋大量實例,更有利于讀者在學習過程中不斷實踐。
譯者序
在Web 開發方面,相信大家對PHP 語言并不會感到陌生。是的,使用PHP 語言實現Web 應用開發確實非常便捷,正因如此,PHP 語言獲得了大量Web 開發者的忠實擁護,譯者也是其中之一。
在開發過程中,如果能使用一款優秀的PHP 框架將會事半功倍。目前使用PHP 語言開發Web 項目通常有三種方案:使用原生PHP 代碼(不基于框架)開發、基于框架開發以及基于框架并對框架進行二次開發。對大部分公司來說,開發效率這項指標是非常重要的,又因為框架實際上相當于項目的半成品,所以大部分公司可能更傾向于選擇一款性能優越的PHP 框架,基于框架進行具體項目的開發。
目前,可以選擇的PHP 開發框架有很多,比如Laravel、ThinkPHP、Yii、CakePHP 等,這些框架各有千秋,但如果非要讓譯者在其中選擇出一兩款自己更喜歡的框架,那么應該是Laravel 與ThinkPHP。Laravel 框架性能較好,運行速度較快,適合開發中大型項目,在國際范圍內都比較流行,但由于Laravel 框架是由國外研發的,所以目前可參考文獻與資源在國內都比較匱乏。ThinkPHP 框架是國內研發的,性能同樣也非常好,比較適合開發中小型項目,并且國內的可參考文獻與資源相對較多。這兩款框架都是非常優秀的PHP 開發框架,如果有時間,建議大家對這兩款框架進行深入的研究。
這本書主要對Laravel 框架進行了系統的介紹。包括Laravel 背景、Laravel 開發環境的搭建、路由與控制器、Blade 模板、前端組件、收集和處理用戶數據、Artisan 和Tinker、數據庫和Eloquent、用戶認證和授權、請求和響應、容器、Laravel 測試、API 編寫、存儲與檢索、郵件和通知、任務、隊列、事件、廣播及調度程序、助手和集合等。上面已經提到,Laravel 框架的相關學習資料比較匱乏,因此,衷心希望這本書出版后在一定程度上能夠彌補這方面的空缺。
有幸得到博文視點編輯孫奇俏老師的邀請,并在孫老師的監督下完成了本書的翻譯與審校工作。但由于我公司事務繁忙,精力有限,所以邀請了我的學生黃夢穎與俞渺共同完成了本書的翻譯工作。黃夢穎與俞渺都是非常優秀的高材生,都有過國外留學經歷,黃夢穎同學現已獲得了新加坡國立大學碩士學位,俞渺同學現已獲得墨爾本大學碩士學位。
翻譯過程中,我負責正文第1 ~ 6 章翻譯以及全書的審校工作,黃夢穎負責正文第7 ~10 章、第13 和14 章、前言、封底、詞匯表、作者簡介、封面簡介等的翻譯工作,俞渺負責正文第11 和12 章、第15 ~ 17 章的翻譯工作。在此由衷感謝兩位同學的艱苦付出,若讀者在閱讀過程中發現翻譯文風略有不同,還請理解。
本書關于Laravel 框架相關知識的介紹非常具體,如果你希望系統地學習并掌握Laravel框架,那么本書將非常適合你。當然,由于Laravel 屬于PHP 語言眾多框架中的一種,所以,大家在閱讀本書之前最好先學習一些關于PHP 的基礎知識,這樣會更容易理解本書的內容。
再次感謝孫奇俏老師的邀請,感謝本書編輯楊嘉媛,孫老師與楊編輯在本書的審稿與編加過程中付出了大量的精力與心血。感謝黃夢穎與俞渺對翻譯做出的巨大貢獻。感謝本書原作者Matt Stauffer 在寫作過程中付出的巨大努力。感謝所有一直支持我的朋友們。
感謝所有PHP 的忠實擁護者與Laravel 愛好者,謝謝你們的支持!
韋瑋
2018 年1 月于上海
前言
一個很常見的問題是,應該如何學習Laravel ?盡管已經寫了很多年的PHP 程序,但是我不想閉門造車,我想更好地學習Rails 的強大特性,也想學習其他先進的Web 框架。
Rails 有一個非常活躍的社區,完美結合了默認配置及其靈活性,并且具有Ruby Gems的能力來提高預包裝的常用代碼。
我曾經也很猶豫是否要繼續使用PHP,直到知道了Laravel,我才堅定信心。Laravel具備Rails 所有的特性,但它不僅僅是Rails 的一個副本,更是一個全新的Web 框架。
Laravel 提供了非常完善的文檔、開放的交流社區,還繼承了許多現有的語言和框架。當我在博客和會議中分享Laravel 的學習經驗時,我已經使用Laravel 開發了幾十個應用程序和項目,并且可以在線或者面對面與成千上萬名Laravel 開發者進行交流。我的工具箱中已經有很多種開發工具了,但是當打開命令行終端,輸入laravel new project 時,我還是會感到非常激動。
關于本書
這并不是第一本關于Laravel 的書,也不會是最后一本。我不打算讓它成為一本涵蓋每一行代碼或實現模式的書。我也并不希望它一定要與現在最新版本的Laravel 保持一致。
相反,我編寫本書的主要目的是提供一個高階的概述和具體的例子,幫助開發者更快地學習Laravel。我希望能幫助讀者理解Laravel 背后的基本概念,而不是單純講解文檔。
Laravel 是一個強大且靈活的PHP 框架。它擁有發展迅速的社區、豐富的開發工具,這些特性都讓Laravel 越來越受歡迎。本書旨在幫助已經知道如何開發網站和應用程序的開發者學習如何在Laravel 中進行開發。
Laravel 的官方文檔非常清晰明了,如果讀者對一些特定的內容感興趣,但本書中又沒有進行深入講解,那么建議讀者參考Laravel 的在線文檔進行深入學習。
本書不僅對知識點進行概述,也提供了相應的實例。在學習完本書后,相信讀者便可以使用Laravel 從頭開始實現一個完整的應用程序了。希望本書能激發大家動手操作的興趣。
目標讀者
讀者要具備基本的面向對象編程基礎,了解PHP(或者至少是C 語言的一般語法),以及模型- 視圖- 控制器(MVC)開發模式和模板的基本概念。如果從來沒有開發過網站,那么可能會覺得本書的內容比較難懂。但是只要有一定的編程基礎,就不需要在閱讀本書之前了解Laravel我們會在本書中從Hello, world!開始,覆蓋所有需要了解的內容。
本書結構
本書按照時間順序編寫:如果正在使用Laravel 構建第一個Web 應用程序,那么前面的章節將介紹開始時需要使用的基本組件,后面的章節將更深入地介紹知識點及對應的具體實例。
本書的每一部分都可以單獨閱讀,但是也力圖使章節之間的聯系更加緊密,以便剛接觸框架的讀者能夠從頭到尾順暢地進行閱讀和學習。
每章節的最后都包括測試和本章小結(TL;DR),TL;DR 表示長話短說。這兩部分將展示如何測試對應章節中講過的方法,并對所涵蓋的內容進行高階概述。
本書基于Laravel 5.3 版本,但是因為Laravel 5.1 是最新的LTS 版本,所以Laravel 5.2或Laravel 5.3 中的新功能將被標記出來。
Matt Stauffer,既是一名開發者,也是一位教師。他是Tighten Co. 和合伙人兼技術總監,主辦過The Five-Minute Geek Show和Laravel Podcast。博客地址是http://mattstauffer.co/。
韋瑋,重慶韜翔網絡科技有限公司董事長兼CEO,《精通Python網絡爬蟲》作者,CSDN特邀IT專家,51CTO學院特約專家講師,《知道日報》特約作者,國家工信部高級網絡營銷師,蜻蜓FM獨家簽約主播,國家專利發明人,多年IT從業經驗,曾出品發明過多門IT課程并獲得大量學員的支持與喜愛。
目錄
前言 ..........................................................................................xxiii
第1 章 為什么使用Laravel ..........................................................1
為什么要使用框架 .................................................................................................1
自己動手做 ..................................................................................................2
一致性和靈活性 ..............................................................................................2
Web 和PHP 框架的簡史 ........................................................................................2
Ruby on Rail ....................................................................................................2
PHP 框架的涌入 ..............................................................................................3
CodeIgniter 的優點與缺點 ..............................................................................3
Laravel 1、Laravel 2 和Laravel 3 ...................................................................3
Laravel 4 .........................................................................................................4
Laravel 5 .........................................................................................................4
Laravel 有什么特別之處 ........................................................................................4
Laravel 的哲學 ................................................................................................4
Laravel 如何讓開發者快樂 ..............................................................................5
Laravel 社區 ....................................................................................................6
它是如何工作的 .....................................................................................................6
為什么使用Laravel ................................................................................................9
第2 章 搭建Laravel 的開發環境 ................................................11
系統要求 ....................................................................................................... 11
Composer ...................................................................................................... 11
本地開發環境 ......................................................................................................12
Laravel Valet ..................................................................................................12
Laravel Homestead ........................................................................................13
創建一個新的Laravel 項目 .................................................................................17
使用Laravel 安裝工具來安裝Laravel ..........................................................17
通過Composer 的create-project 來安裝Laravel ...........................................17
Laravel 的目錄結構 ..............................................................................................18
文件夾 ...........................................................................................................18
文件 ...............................................................................................................19
配置 .....................................................................................................................19
啟動和運行 ..........................................................................................................20
測試 .....................................................................................................................21
本章小結 ..............................................................................................................21
第3 章 路由和控制器 ................................................................23
路由定義 ..............................................................................................................23
路由處理 .......................................................................................................25
路由參數 .......................................................................................................26
路由名稱 .......................................................................................................27
路由組 ..................................................................................................................30
中間件 ...........................................................................................................30
路徑前綴 .......................................................................................................31
子域名路由 ...................................................................................................32
命名空間前綴 ................................................................................................33
名稱前綴 .......................................................................................................33
視圖 .....................................................................................................................33
使用視圖Composers 在每個視圖中共享變量 ...............................................35
控制器 ..................................................................................................................35
獲取用戶輸入 ................................................................................................38
將依賴注入控制器 ........................................................................................39
資源控制器 ...................................................................................................40
路由模型綁定 ......................................................................................................42
隱式路由模型綁定 ........................................................................................42
自定義路由模型綁定 .....................................................................................43
路由緩存 ..............................................................................................................44
表單方法欺騙(Form Method Spoofing) .............................................................44
HTTP 動詞的介紹 .........................................................................................44
Laravel 中的HTTP 動詞 ...............................................................................45
在HTML 表單中進行HTTP 方法欺騙 .........................................................45
CSRF 保護 ...........................................................................................................45
重定向 ..................................................................................................................47
redirect()->to() ...............................................................................................48
redirect()->route() ..........................................................................................48
redirect()->back() ..........................................................................................49
其他重定向方法 ............................................................................................49
redirect()->with() ...........................................................................................49
中止請求 ..............................................................................................................51
自定義響應 ..........................................................................................................51
response()->make() ........................................................................................51
response()->json() 和->jsonp() ...........................