Laravel 框架關鍵技術解析·讀書筆記(二)
第五章
-
框架應用程式根目錄(5.1版本)
預設的Laravel框架應用程式是符合PSR規範的,所以相應的目錄結構也是基本固定的,不同的目錄載入了功能檔案,如果新增了新的目錄,需要在composer.json檔案中新增PSR規範的自動載入部分並執行update命令。
- App: 主要包括應用程式的核心程式碼,使用者構建應用的大部分工作都在app目錄下進行,包括路由檔案、控制檔案、模型檔案等。
- bootstrap:主要包含幾個框架啟動和自動載入配置檔案
- config:主要包含應用程式常用的配置檔案資訊
- database:主要包含資料庫遷移和資料庫填充檔案。
- public :應用程式的入口檔案,包含應用程式入口檔案index.php,同時包含靜態資原始檔如CSS,JavaScript,images等。
- resource:主要包含檢視檔案。
- storage:包含編譯後的blade模板,基於檔案的session,檔案快取和日誌檔案等。
- tests:主要包含自動化測試檔案。
- vendor:主要包含依賴庫檔案,其中包括框架原始碼
- .env:一個重要的檔案,為Laravel框架的主配置檔案。
- composer.json:composer專案依賴管理工具
-
app目錄
應用程式的大部分內容都存在於app目錄下,該目錄同樣通過composer使用自動載入標準(PSR-4)來載入其中的檔案,如果想改變目錄下的名稱空間,可以使用artisan命令app:name完成,也可以直接修改composer.json檔案實現。
- console:主要包含所有的artisan命令
- events:用來控制與事件相關的類
- exceptions:包含應用程式的異常處理類,用於處理應用程式丟擲的任何異常
- Http:主要包含路由檔案、控制器檔案、請求檔案,中間檔案等,是應用程式與Laravel框架原始碼等外部庫互動的主要檔案。
- Jobs:主要包含訊息佇列的各種訊息類檔案
- Listener:主要包含監聽事件類檔案。
- Provider:主要包含服務提供者的相關檔案。
-
vendor目錄
由一個個相互依賴的功能元件模組組織起來的,可以獨立工作,也可以被組織起來協調工作。
- composer:主要包含composer按照PSR規範生成的自動載入類。應用程式的自動載入都是由這部分實現的。
- laravel:包含laravel框架原始碼,程式碼部分都包含在vendorlaravelframeworksrcIlluminate檔案中
- symfony:laravel框架的底層(如請求類、相應類、檔案管理類)使用了symfony框架的部分,所以該目錄包含這部分內容。
- monolog:包括日誌記錄模組檔案
- phpunit:包含程式單元測試模組檔案
-
路由
可以理解為將路由設定的過程理解為微程式內部定義了一個路由表,與網路中使用的路由器一樣,也事先需要有一個路由表。當不同的請求到來時,根據路由表選擇不同的處理程式
- 基礎路由設定
基本路由是一個資源定位符(URL)對應一個響應程式,這個程式可以是一個閉包函式,也可以是一個控制器響應函式的標識
具體格式:
Route::get(`/`,function () {
return `Hello Laravel`;
});
如果請求其他方法,則需要使用對應的路由設定方法進行定義,對應的方法由get,post,put,delete等。
對於多種請求的路由定義,可以通過match和any方法實現,
Route::match([`get`,`post`],`/`,function () {
return `Hello Laravel`;
});
Route::any(`home`, function () {
return `Hello Laravel`;
});
- 路由引數
主要針對的是Get請求的情況
Route::get(`資源標識/{引數名}[?][/{引數名}……`, `閉包函式或者控制器響應函式標識`)[->where(`引數名`,`正規表示式`)];
Route::get(`user/{id}`,function ($id){
return `$id=` . $id;
});
Route::get(`user/{id}/{name}`,function ($id, $name){
return `$id=` . $id . ` and $name=` . $name;
})->where([`id` => `[0-9]+`, `name` => `[a-z]+`]);
-
控制器路由
-
基礎控制器路由
Route::get(`home/{name}`,`HomeController@index`);
-
- 隱式控制器路由
- RESTFul資源控制器路由
- 路由群組
- 路由命名
相當於在路由定義時為路由起一個別名,以後可以使用別名來獲取路由的資訊
- 控制器
-
檢視
檢視檔案是以“.balde.php”字尾命名。
-
資料傳遞
- 陣列方式
- with函式
- with加變數名方式
-
blade模板
- @extends(`佈局檔名`):用於繼承一個佈局檔案
- @section(`區塊名`):用於定義一個區塊,可以有不同的結尾標識,@show用於顯示這個區塊,@stop和@endsection用於結束一個區塊,@overwirte用於重寫前面的區塊
- @parent:用於顯示繼承的佈局模組中的檔案。
- @yield(`區塊檔案`,’預設檔案‘):用於定義在佈局檔案中定義一個區塊
- @include(`子檢視檔名稱`):用於在檢視檔案中載入檢視檔案。
-