看過很多關於helper輔助檔案的教程 我進行個進一步優化
很多教程都會說,你在 composer.json
這個檔案中通過新增一個自動載入的檔案,就可以實現這個需求。但我認為這不是一個好的方式,當你在 helpers.php
檔案中新增了更多的函式時,可讀性將變得很差。
下面我將介紹一種方式,讓你可以定義很多檔案,來包含不同的函式。這將讓我們的程式更加整潔和更具可讀性。
我們開始吧.. ?
首先建立一個 HelperServiceProvider.php 服務提供者檔案:
php artisan make:provider HelperServiceProvider
使用上面命令,你將在 app\Providers
檔案中生成 HelperServiceProvider.php
你可以簡單的移除 boot()
方法,我們在這兒不會使用它。
在 register()
方法中我們新增以下程式碼:
public function register()
{
$this->directoryToArray(app_path('Helpers'));
}
private function directoryToArray($directory, $recursive = false) {
$array_items = array();
if(!is_dir($directory)) return "$directory folder does not exist";
if ($handle = opendir($directory)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
if (is_dir($directory. "/" . $file)) {
if($recursive) {
self::directoryToArray($directory. "/" . $file, $recursive);
}
if($this->validateExt($file)){
$file = $directory . "/" . $file;
require_once $file;
}
} else {
if($this->validateExt($file)){
$file = $directory . "/" . $file;
require_once $file;
}
}
}
}
closedir($handle);
}
}
/*該段存在判斷BUG 請廢棄
private function validateExt($file){
$file_path = pathinfo($file);
if($file_path ['extension'] == 'php'){
return true;
}
return false;
}*/
private function validateExt($file){\
$file_path = pathinfo($file);\
Log::info($file_path);\
if(isset($file_path['extension'])){\
if($file_path['extension'] == 'php'){\
return true;\
}\
}\ return false;\
}
這個迴圈將會遍歷 app/Heplers
目錄下及子目錄的所有檔案,你可能已經猜到了,現在你可以在這個目錄或子目錄下隨便建立檔案,它們將會被載入到你的應用程式中,這些幫助函式在你的程式碼的任何地方都可以被訪問(views, models, controllers...)
我們還需要載入這個服務提供者,開啟 config/app.php
,然後將 HelperServiceProvider
放在你的 AppServiceProvider
上面
...
App\Providers\HelperServiceProvider::class,
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
App\Providers\BroadcastServiceProvider::class,
...
現在讓我們建立一個簡單的函式,在 app/Helpers
目錄中建立一個 Carbon.php
檔案,檔案中包含以下程式碼:
好的! 現在,您可以開始使用自己的PHP檔案填充 app / Helpers目錄,其中包含您經常使用的幫助程式 ?