iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0
自我挑戰組

PHP 沿途的風景系列 第 16

[Day 16] 自制 Laravel helper response function

  • 分享至 

  • xImage
  •  

自制 Laravel helper response function

有些時候 call api 的 response 存在著固定格式,例如 status code: 200 (XX成功) , 400 (XX失敗) 或者 response 帶資料

  • Basic Response: status code: 200 (XX成功), 400 (XX失敗) ..等
{
  "timestamp": "2021-05-07 17:05:57",
  "status": 200,
  "message": "XX成功"
}
  • Data Response: Response 帶資料
{
  "timestamp": "2021-05-07 17:05:57",
  "status": 200,
  "message": "XX成功",
  "data": {
      "XXX":  "XXooXX#",
  },
}

建立 helper function

Laravel 內建立 helper function 沒什麼指令,也就是說 php artisan make ... 裡面不存在 php artisan make:helper,因此,這邊得自己在 /app 底下自建資料夾 /HelpersSystemResponse.php

  • 資料夾名稱 Helpers 和 檔案名稱 SystemResponse 都是自己取的名稱,可以取其他有意義的名稱,但是要注意,請符合 PSR 的命名規則
  • 檢視 Laravel 可以透過 make 建立什麼: php artisan make -h

class SystemResponse

依照 Laravel 會自動將 陣列 轉換為 JSON Response,這邊就不在使用 json() ,我在 Laravel 陣列 轉換為 JSON Response,真的嗎? 一文中驗證不加 json() 會如何。

  • 預設 $status = 200, $message = '查詢成功'..等,使用不同Response(),再自行將 value 帶入
<?php
namespace App\Helpers;

class SystemResponse
{
    // Basic Response
    // 預設 $status = 200,若為 $status = 400 ,使用 basicResponse() 自行帶入
    public static function basicResponse($message, $status = 200)
    {
        return response([
            'timestamp' => now()->format('Y'),
            'status'    => $status,
            'message'   => $message,
        ], $status);
    }
    
    // Data Response
    public static function dataResponse($data, $message = '查詢成功', $status = 200)
    {
        return response([
            'timestamp' => now()->format('Y'),
            'status'    => $status,
            'message'   => $message,
            'data'      => $data,
        ], $status);
    }
}

引入 class SystemResponse

我特意將 method 寫作 static function,使用 static function 不需要實體化,直接 SystemResponse::basicResponse('hello word!');,便可以使用該方法 產生 response,例如:

  • Basic Response:
<?php

use Illuminate\Support\Facades\Route;
use App\Helpers\SystemResponse;

Route::get('basic', function(){

    return SystemResponse::basicResponse('hello word!');

});


  • Data Response:
<?php
Route::get('data', function(){

    $data = [
        'gender' => 'female',
        'height' => '168 cm',
        'weight' => '43 kg',

    ];
    return SystemResponse::dataResponse($data);
});

結語

當 Response 存在著固定格式輸出時,透過自制的 SystemResponse function,減少撰寫重複程式碼,讓程式碼具有可讀性,接下來我將簡介 Laravel format response 的方法 Resource.


參考文章

Laravel 陣列 轉換為 JSON Response,真的嗎?


上一篇
[Day 15] 好奇 **陣列** 轉換為 JSON Response,真的嗎?
下一篇
[Day 17] Laravel 的 XXXResource::make() 的 make() 作用 - 我以為的 static
系列文
PHP 沿途的風景30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言