在公司專案裡,除了使用Laravel 提供的輔助函數外,我們還可以透過建構屬於自己的Helper function 可以方便地執行諸如處理陣列、文件路徑、字符串和路由等操作,來協助我們更方便處理重複的程式碼。
首先我們在Laravel應用程序裡創建我們的helpers文件,教學文檔有建議的位置,如下
選擇創建在app底下
Laravel框架使用Composer自動加載機制來管理應用程序中的類文件,而在composer.json
文件中可以看到autoload 和 autoload-dev ,而在composer.json
文件中的 autoload
部分可以定義幾個不同的鍵(keys)來告訴 Composer 如何自動加載類文件。
這邊我們將使用files
,來載入我們的 helpers.php
files:用於指定要在應用程序加載時引入的 PHP 文件。這可以用於引入一些全局的函數或設定文件。
"autoload": {
"files": ["app/helpers.php"]
}
添加完 files
路徑後執行composer dump-autoload
,而composer dump-autoload
是 Composer 命令的一部分,用於重新生成自動加載文件,以確保 Composer 正確地自動加載我們的 PHP 類文件。
composer dump-autoload
接著創建我們的輔助函數,這邊根據文件說明,使用function_exists
檢查函數命名,以避免函數定義衝突。
這邊實作一個 ip 清單的檢查來過濾重複ip
//過濾重複ip及陣列包含'*'就只回傳'*'
if (!function_exists('filter_ip_list')) {
function filter_ip_list(array $ipList): array
{
if (empty($ipList)) {
return [];
}
$ipList = array_unique($ipList);
if (in_array('*', $ipList)) {
return ['*'];
}
return $ipList;
}
}
這邊是Controller的code
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class StoreAction extends Controller
{
/** * Handle the incoming request. */
public function __invoke(Request $request)
{
$apiWhiteList = filter_ip_list($request->get('apiWhiteList'));
dd($apiWhiteList);
}
}
接著我們使用 postman 來執行測試這段程式碼是否根據設計的方式過濾重複 ip
接著再傳入值多帶["*"],看是否只存放*
總結:以上作業模式可以幫助我們將常使用的方法,把他整理到helper function裡面,透過 composer 自動加載,來讓我們可以更方便的使用,簡化一些程式碼在多個文件上的重複使用。