Laravel 入門與實戰:構建主流 PHP 應用開發框架 Laravel: Up and Running: A Framework for Building Modern PHP Apps

韋瑋, 馬特·斯托弗 (Matt Stauffer)

買這商品的人也買了...

商品描述

本書從基礎開始詳細地講解了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。

韋瑋,重慶韜翔網絡科技有限公司董事長兼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 1Laravel 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() 52

response()-download() -file() 52

測試 .52

本章小結 53

4 章 Blade 範本 ....55

輸出資料 56

控制結構 56

條件陳述式 ...57

迴圈語句 ...57

or .....59

範本繼承 60

@section/@show @yield 定義Section .60

@parent .62

@include ...62

@each ....63

視圖Composer 和服務注入 .....63

用視圖Composer 綁定資料到視圖 .....64

Blade 服務注入 .....67

自訂Blade 指令 .68

自訂Blade 指令中的參數 ....69

示例:對多租戶應用程式(Multitenant App)使用自訂Blade 指令..70

測試 .71

本章小結 72

5 章 前端組件 .73

Elixir 73

Elixir 資料夾結構 ..75

運行Elixir .75

Elixir 提供了什麼 ..76

分頁 .82

分頁資料庫結果 ....82

手動創建分頁 ..83

消息包 ....84

錯誤包命名 .....85

字串助手、多元化和當地語系化 86

字串助手和多元化 ...86

當地語系化 ...87

測試 .89

Elixir 進行測試 .89

測試消息包和錯誤包 ...90

翻譯和當地語系化 ..90

本章小結 90

6 章 收集和處理使用者資料 ..91

注入請求物件 ..91

$request-all() .92

$request-except() $request-only() ...92

$request-has() $request-exists() ..93

$request-input() ...93

陣列輸入 ...94

JSON 輸入($request-json() 94

路由數據 96

通過Request 實現 .96

通過路由參數實現 96

上傳的文件 ..96

驗證 .99

在控制器中使用ValidatesRequests validate() 方法 ....99

手動驗證 . 102

顯示驗證錯誤資訊 .... 102

表單請求 .... 103

創建表單請求  103

使用表單請求  104

Eloquent 模型品質分配 .... 105

{{ {!! ..... 106

測試 ..... 106

本章小結 .... 107

7 章 Artisan Tinker .....109

Artisan 入門 ... 109

Artisan 的基本命令 .... 110

選項 ..... 110

組合命令 . 111

書寫常見的Artisan 命令 .. 113

註冊命令 . 115

示例命令 . 116

參數和選項 ... 117

輸入 ..... 118

提示 .... 120

輸出 ..... 121

在其他代碼中調用Artisan 命令 .. 122

Tinker ... 123

測試 ..... 124

本章小結 .... 125

8 章 資料庫和Eloquent ...127

配置 ..... 127

資料庫連接 ... 127

其他資料庫配置選項 . 129

遷移 ..... 129

定義遷移 . 129

運行遷移 . 137

填充 ..... 138

創建填充器 ... 138

模型工廠 . 139

查詢構造器  143

DB Facade 的基本使用.... 143

原始SQL 語句 .... 144

查詢構造器鏈  145

事務 ..... 153

Eloquent 入門 . 154

新建和定義Eloquent 模型 .... 156

通過Eloquent 獲取資料 .. 157

Eloquent 的插入和更新 ... 159

Eloquent 中的刪除 .... 162

作用域 . 164

自訂與訪問器、修改器和屬性轉換器的欄位交互 .... 167

Eloquent 集合  171

Eloquent 序列化 .. 173

Eloquent 關係  175

通過子類更新父類時間戳記 ..... 186

Eloquent 事件 . 188

測試 ..... 189

本章小結 .... 191

9 章 用戶認證和授權 .193

使用者模型和遷移 ... 194

使用auth() 全域助手和認證Facade .. 197

Auth 控制器 ... 197

RegisterController ..... 197

LoginController ... 199

ResetPasswordController . 200

ForgotPasswordController ..... 200

Auth::routes() . 200

認證腳手架(Auth Scaffold . 201

“記住我” .... 202

手動認證用戶  203

認證中介軟體  204

保護 ..... 204

修改默認保護  205

在不改變預設情況下使用其他保護 .. 205

添加新的保護  205

創建自訂用戶提供器 ... 206

為非關係型數據庫自訂用戶提供器 .... 207

認證事件 .... 207

授權(ACL)和角色 . 208

定義授權規則  208

Gate facade(和注入Gate ... 209

Authorize 中介軟體 . 210

控制器授權 ... 210

檢查使用者實例  212

Blade 檢查 ..... 213

插入檢查 . 213

政策 ..... 214

測試 ..... 216

本章小結 .... 218

10 章 請求和回應 221

Laravel 請求的生命週期 .. 221

引導應用程式  222

服務提供者 ... 223

Request 對象 .. 224

Laravel 中獲取請求對象 ... 225

獲取請求的基本資訊 . 225

持久性 . 228

Response 對象  228

在容器中使用和創建Response .... 229

特殊的回應類型 .. 230

Laravel 和中介軟體 . 233

中介軟體入門 ... 233

創建自訂中介軟體 .... 234

綁定中介軟體 ... 236

向中介軟體傳參  239

測試 ..... 240

本章小結 .... 241

11 章 容器 ....243

依賴注入簡介  243

依賴注入和Laravel .... 245

app() 全域助手 ..... 245

容器如何連接  246

將類綁定到容器 ... 247

綁定到閉包 ... 247

綁定單例模式、別名和實例 . 248

將具體實例綁定到介面 ... 249

語境綁定 . 250

構造器注入  250

方法注入 .... 251

facade 與容器 . 252

facade 如何工作 .. 252

服務提供者  254

測試 ..... 254

本章小結 .... 255

12 章 測試 ....257

測試基礎 .... 258

命名測試 .... 260

測試環境 .... 261

測試特性 .... 262

WithoutMiddleware ... 262

資料庫遷移 ... 262

資料庫事務 ... 263

應用程式測試  263

測試用例 . 263

“訪問”路徑 .. 264

自訂應用測試斷言 . 266

JSON Non-visit() 應用測試斷言 ... 267

點擊和表單 ... 271

任務和事件 ... 273

認證和會話 ... 273

Artisan Seed..... 274

mock(模擬) . 275

Mockery .. 275

模擬facade .... 278

本章小結 .... 279

13 章 編寫API ....281

REST JSON API 基礎 .. 281

控制器組織和JSON 返回  282

讀取和發送頭  286

Laravel 中發送回應頭  287

Laravel 中讀取請求頭  287

Eloquent 分頁 . 287

排序和篩選  289

API 結果排序 .. 289

過濾API 結果 ..... 291

資料轉換 .... 292

編寫自己的轉換器 .... 292

嵌套和關係  293

使用Laravel Passport API 認證 ..... 295

OAuth2.0 簡介 ..... 295

安裝Passport . 296

Passport API ... 297

Passport 可用的授權類型  298

使用Passport API Vue 元件管理用戶端和權杖 .. 305

Passport 作用域 ... 307

Laravel 5.2 以上版本的API 權杖認證 ..... 309

測試 ..... 310

本章小結 .... 311

14 章 存儲和檢索 313

本地和雲端檔案管理員 .... 313

設定檔訪問  313

使用存儲facade .. 314

添加額外的Flysystem 提供商 ..... 316

基本的檔上傳和操作 .... 317

會話 ..... 318

訪問會話 . 318

會話實例的可用方法 . 319

快閃記憶體會話存儲  321

快取記憶體器cache . 321

訪問快取記憶體  322

Cache 實例中可用的方法  322

cookie ... 324

Laravel 中的cookie ... 324

訪問cookie 工具 . 324

基於Laravel Scout 全文檢索搜尋 . 327

安裝Scout ..... 327

標記索引模型  327

索引檢索 . 328

佇列和Scout . 328

執行無索引操作 .. 328

通過代碼手動觸發索引 ... 329

利用CLI 手動觸發索引 .. 329

測試 ..... 329

檔存儲 . 329

會話 ..... 331

快取記憶體 . 332

cookie .. 332

本章小結 .... 334

15 章 郵件和通知 335

郵件 ..... 335

classic”郵件 ..... 336

基本“mailable”郵件..... 336

郵件模版 . 339

build() 中可用的方法  339

附件和內聯圖片 .. 340

佇列 ..... 341

本地開發 . 342

通知 ..... 344

為通知物件定義via() 方法 ... 346

發送通知 . 347

排隊通知 . 348

開箱即用的通知類型 . 348

測試 ..... 351

郵件 ..... 351

通知 ..... 352

本章小結 .... 352

16 章 佇列,任務,事件,廣播及調度程式 ...353

佇列 ..... 353

為什麼使用佇列 .. 354

基本佇列配置  354

列隊任務 . 354

運行佇列工作者 .. 358

錯誤處理 . 358

控制佇列 . 361

支援其他功能的佇列 . 361

事件 ..... 362

觸發事件 . 362

監聽事件 . 364

通過WebSocket 廣播事件及Laravel Echo .... 367

配置和設置 ... 368

廣播事件 . 368

接收消息 . 371

高級廣播工具  372

Laravel EchoJavaScript 方面).. 376

調度程式 .... 379

可用任務類型  380

可用時間框架  380

阻塞和重疊 ... 382

處理任務輸出  382

任務鉤子 . 383

測試 ..... 384

本章小結 .... 385

17 章 助手和集合 387

助手 ..... 387

陣列 ..... 387

字串 . 389

應用路徑 . 391

URL ..... 392

Misc(巨集指令結構技術體系) ..... 394

集合 ..... 397

集合的基礎 ... 397

幾種方法 . 399

本章小結 .... 404

詞彙表 ....405