用 saveQuietly 存資料不觸發任何事件,再透過 Builder macro 定義 fire 方法,選擇性地手動觸發 created 或其他 Eloquent event。
IAM 缺少 s3:ListBucket 時,S3 對不存在的檔案回傳 403 而非 404,[Flysystem](https://flysystem.thephpleague.com) 因此拋出例外。補上權限後 exists() 即可正常回傳 false。
PHPUnit 測試時不斷出現 gRPC "Waiting for thread pool to idle" 警告,原因是 gRPC 版本過高,降版到 1.49.0 即可消除。
不用 Docker Desktop,直接在 WSL2 安裝 Docker CE 的完整步驟,包含加入 docker 群組免 sudo、啟用 systemd 讓 Docker 開機自動啟動。
Facade 透過 getFacadeAccessor 從 Container 解析 instance 的機制,以及 bind 與 singleton 的差異。
程式裡有 sleep() 讓每次測試都要多等幾秒,可抽出 Clock class 用 Mockery spy 替換,或用 php-mock 直接 mock 內建函式,無需改動原始碼。
第三方 class constructor 需要參數時 Container 無法自動 resolve。在 ServiceProvider 用 bind 註冊,即可在任何地方 type-hint 注入。
macOS artisan tinker 用 Guzzle 噴 NSCFConstantString 錯誤,設環境變數關閉 fork safety 即可解決。
Python 爬蟲、PHP 後續處理的跨語言架構:讓 Python 輸出 PSR-7 message 字串,PHP 用 parseResponse 解析,免手動拆 header 和 body。
透過 PDO::exec 把 schema dump 直接載入 SQLite in-memory database,跳過逐一跑 migration 的瓶頸,實測從 2 分 21 秒降到 18 秒。