【Laravel】Laravel 框架關鍵技術解析·讀書筆記(二)

xiaoyu_v5發表於2019-02-16

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(`子檢視檔名稱`):用於在檢視檔案中載入檢視檔案。

相關文章