建構屬於自己的Laravel Helper 輔助函數

2023/09/14閱讀時間約 4 分鐘

在公司專案裡,除了使用Laravel 提供的輔助函數外,我們還可以透過建構屬於自己的Helper function 可以方便地執行諸如處理陣列、文件路徑、字符串和路由等操作,來協助我們更方便處理重複的程式碼。

決定檔案放置位置

首先我們在Laravel應用程序裡創建我們的helpers文件,教學文檔有建議的位置,如下

  • app/helpers.php
  • app/Http/helpers.php

選擇創建在app底下

raw-image

使用Composer 自動加載

Laravel框架使用Composer自動加載機制來管理應用程序中的類文件,而在composer.json 文件中可以看到autoload 和 autoload-dev ,而在composer.json 文件中的 autoload 部分可以定義幾個不同的鍵(keys)來告訴 Composer 如何自動加載類文件。

這邊我們將使用files,來載入我們的 helpers.php

files:用於指定要在應用程序加載時引入的 PHP 文件。這可以用於引入一些全局的函數或設定文件。

"autoload": {
"files": ["app/helpers.php"]
}
raw-image

添加完 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

raw-image

接著再傳入值多帶["*"],看是否只存放*

raw-image

總結:以上作業模式可以幫助我們將常使用的方法,把他整理到helper function裡面,透過 composer 自動加載,來讓我們可以更方便的使用,簡化一些程式碼在多個文件上的重複使用。






13會員
37內容數
學涯無止境,透過每日or每週模仿學習筆記,不管是哪些領域也好,總有一天也可以從菜雞變小雞
留言0
查看全部
發表第一個留言支持創作者!