php助手函数自定义,Laravel 添加自定义助手函数
前言
在學習完教程中添加自定義助手函數文件時,還是得記錄一下,感覺對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 協議》,轉載必須注明作者和本文鏈接
總結
以上是生活随笔為你收集整理的php助手函数自定义,Laravel 添加自定义助手函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分红派息散户有好处吗?
- 下一篇: 利息前置什么意思?