pro360_api_82 設定來源

目的

記錄 /Users/mattsu/Documents/Site/pro360_api_82 的主要設定來源與查詢順序。

這份文件只記來源與 key 名稱,不記 secret 值。

主要檔案

路徑用途
Lib/Common/Configuration.phpnew API 主要常數設定,包含 DB、Slack/log、語系、時區、第三方服務 key
docker/staging/Configuration.phpstaging build 可能覆蓋到容器內 Lib/Common/Configuration.php
Lib/Common/DBFactory.phpDB 連線入口,讀取 Configuration.php 的 DB constants
Lib/Common/DBConfiguration.phpDB query / modify 實作與 DB error log
Lib/Common/DBConfigurationArray.phpDB connection wrapper
Lib/Util/RedisUtil.phpRedis cache / lock / rate limit helper,讀取 use_redisProConfig::get('redis')
Lib/Common/LogHelper.phpMonolog / Slack / PDO handler 組合入口
Lib/Common/MySlackHandler.phpSlack payload 與 webhook 選擇
Lib/Common/PDOHandler.phpMonolog 寫 DB table 的 handler
Lib/Common/View.phpview / translation helper,含 timezone display 與 language id 使用
Lib/Common/Controller.phplanguage path handling,例如 URL 語系 segment
Lib/Common/RouterV3.php目前主要 router,會移除語系 path segment,並依序套用 Mapping / Origin / File routing rule
Lib/Common/RouterRule/Mapping.php舊 path / 特殊 path 到 endpoint action 的明確對照表
Lib/Common/RouterRule/Origin.php/v1/<endpoint>/<action> 類 origin rule
Lib/Common/RouterRule/File.php依 endpoint file fallback 的 route rule
composer.jsonautoload files 會載入 Configuration.phpFatalErrorHandler.php

設定載入順序重點

Composer autoload 會載入:

Lib/Common/Configuration.php
Lib/Common/FatalErrorHandler.php

Docker staging build 可能把:

docker/staging/Configuration.php

複製或覆蓋成容器內的:

/project-data/Lib/Common/Configuration.php

因此不要只用本機 Lib/Common/Configuration.php 判斷 staging / production 的實際設定。

常見設定分類

DB

常見 key 名稱:

DB_Server
DB_Server_Name
DB_DBName
DB_Port
DB_User_Name
DB_Password

實際 DB 連線入口:

Lib/Common/DBFactory.php

查 DB / schema 時依 repo 規則使用容器 PHP 8.2 + DBFactory,不要直接用本機 PHP 或手動 require Configuration.php

Slack / Log

常見 key 名稱:

CurrentLoggerLevel
slackName
slackWebhook
slackWebhook2
LOG_FILE_PATH

詳細判讀見:

Redis

主要來源:

Lib/Common/Configuration.php
docker/staging/Configuration.php
Lib/Util/RedisUtil.php

常見 key:

use_redis
ProConfig::get('redis')['hostname']
ProConfig::get('redis')['port']

詳細規則見 Redis

時區 / 語系

常見 key 名稱:

date_default_timezone_set("UTC")
local_timezone
default_lang
use_multi_langs
use_multi_translation
seo_page_force_lang

相關程式:

Lib/Common/View.php
Lib/Common/Controller.php
Lib/Common/RouterV3.php

時間寫法與資料表時間欄位規則見 時區、語系與時間寫法設定來源。migration 時要分清楚 PHP runtime UTC、local_timezone 台北時間、DB NOW() / CURRENT_TIMESTAMP、以及 queue/log 時間。

area / sys_area

ProConfig::get('area') 會影響路由以外的頁面 partial、語系、電話、費用、第三方服務等行為。排查頁面或 API 差異時,要先確認實際環境載入的 Configuration.phparea 值。

注意:

  • 台灣環境不要設定 area = twsys_area = tw;台灣要保持空值,讓程式走 generic Taiwan/default path。
  • area 只有跨區環境才應設定區域代碼,例如 hk / sg
  • 若需要調整區域設定,應改正確環境來源檔,例如本機 Lib/Common/Configuration.php 或 Docker staging 覆蓋檔,並確認部署流程實際載入哪一份。
  • sys_area 不應被拿來補救 area 設錯造成的行為差異;程式若讀的是 ProConfig::get('area'),就必須修正 area 的來源或該功能的 fallback 邏輯。

案例:

/genre/home 會由 Endpoint/V1/Genre.phpProConfig::get('area') 塞成 view 變數 sys_areaView/Genre/index.phtml 再呼叫 Nearme/footer{$sys_area}。若 area = tw,會找 View/Nearme/footertw.phtml;目前 generic TW footer 是 View/Nearme/footer.phtml,不是 footertw.phtml。因此台灣環境的 area 應保持空值,不要設定成 tw

路由 / path

主要來源:

Lib/Common/RouterV3.php
Lib/Common/RouterRule/Mapping.php
Lib/Common/RouterRule/Origin.php
Lib/Common/RouterRule/File.php

Migration 或查 API path 時,先看 Mapping.php 是否有 legacy path 的明確 mapping;沒有 mapping 時,再看 Origin / File fallback 是否能把 path 轉到 endpoint/action。

詳細規則見 API 路由與遷移

金流 / SMS / 外部服務

Configuration.php 也集中許多第三方服務 key。文件只記 key 名稱與用途,不記值。

設定類型已拆分到:

排查順序

  1. 先確認執行環境:本機、container、staging、production。
  2. 看該環境實際使用的 Configuration.php
  3. 若是 DB,走 DBFactory,不要手動 require 設定。
  4. 若是 Slack/log,先看 slackNameCurrentLoggerLevel 與 handler 設定。
  5. 若是語系 / timezone / 時間欄位,先看常數,再看 Controller / View / RouterV3 是否有二次處理;資料表時間要回到寫入流程確認是 PHP time 還是 DB time。
  6. 若是 API path,先查 RouterRule/Mapping.php,再查 endpoint class 與 action method。