Laravel-自定義全域性函式-ChinaCircle 優化版

圈小圈發表於2019-11-05

看過很多關於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目錄,其中包含您經常使用的幫助程式 ?

借鑑於 翻譯:Laravel-包含你自己的幫助函式

相關文章