前言
在學習完教程中新增自定義助手函式檔案時,還是得記錄一下,感覺對composer
知道的東西太少了,一些命令到底做了什麼還是不知道,總結一下。
新增自定義助手函式檔案
在開發專案的時候,有時候會定義一些函式,而這些函式又不能放在Laravel
框架的助手函式檔案中,如果我們把程式碼部署到生產環境中,再使用composer install
安裝擴充套件,又會覆蓋我們之前修改的檔案。
可見新增的函式必須要定義在我們的檔案中,而且這個檔案必須要納入到git
倉庫中。這麼一來覺得放在app
目錄還不錯,這個目錄是應用相關的目錄,像中介軟體、模型、控制器都在這個這個目錄。
所以我們在app
目錄下新增helpers.php
檔案,新增的函式就可以定義在這個檔案中了。
自動載入助手函式
在上面我們建立了助手函式檔案,把函式定義在app/helpers.php
檔案中了,但是這個檔案不會被composer
自動載入,如果要composer
自動載入器載入我們定義的函式檔案,必須要告訴composer
。
如何告訴composer
載入我們定義的助手函式檔案呢,很簡單,在專案根目錄中的composer.json
檔案新增即可,怎麼新增也是有講究的,我把我新增的結果放在這裡。
...
"autoload": {
"classmap": [
"database/seeds",
"database/factories"
],
"files": [
"app/helpers.php" #這行便是新增的助手函式
]
},
.....
通過上面貼出的程式碼我們可以知道,在autoload
引數下的files
引數可以定義要新增的檔案,這個檔案在新增時要注意路徑,首先助手函式檔案helpers.php
在app
目錄下,而app
目錄和composer.json
是在同一個目錄下,所以新增助手函式時應該這麼寫app/helpers.php
,也就是說通過這個相對路徑可以找到對對應的檔案,不然composer
的檔案載入會失敗。
定義了是不是就完事了呢,還沒有,composer在載入助手函式檔案時,並不是通過composer.json
檔案來記載函式檔案,而是通過composer
載入器定義的幾個檔案,每次從這些檔案中載入檔案。
所以我們在定義了函式檔案後需要執行composer dumpauotload
指令,通過composer
程式來生產載入檔案。執行後會修改vendor/composer
目錄下的autoload_static.php
和auoload_files.php
檔案。
到底在檔案中修改了什麼呢,其實就是把定義的helpers.php
新增到這個兩個檔案中,看下新增後的檔案內容。
// autoload_static.php
class ComposerStaticInit49922490dbe4935d5c7b9f60b23ceb32
{
public static $files = array (
// ......
'ed962a97bd972bc82007176b647d4e36' => __DIR__ . '/..' . '/facade/ignition/src/helpers.php',
'b4e3f29b106af37a2bb239f73cdf68c7' => __DIR__ . '/../..' . '/app/helpers.php',
);
// auoload_files.php
return array(
'ed962a97bd972bc82007176b647d4e36' => $vendorDir . '/facade/ignition/src/helpers.php',
'b4e3f29b106af37a2bb239f73cdf68c7' => $baseDir . '/app/helpers.php',
);
可以看到這兩個檔案中都有helpers.php
檔案,具體用到哪個檔案呢,之後我會一篇文章來說明composer
載入檔案的原理。
總結
一個小小的助手檔案,可以引出這麼多知識點,如果對這些知識點不瞭解,只是知道這麼做,而沒有去了解為什麼這麼做,學習就像是囫圇吞棗,下次估計會忘了使用composer dumpautoload
來生產載入規則檔案,還不知道是哪裡出了問題。
這麼學習下來感覺一個小節可以學習很多知識點,時間消耗的也挺長了,寫這篇文章都已經過去半個小時了,感覺也沒有說什麼,就是把過程捋了一遍。
就這樣吧,如果把精力全部用在寫文章,而忘記是學習瞭解框架的,有點本末倒置了,寫文章的目的是加深學習,看看自己到底知道多少。
本作品採用《CC 協議》,轉載必須註明作者和本文連結