Laravel 驗證迴圈 是做什麼的?
在 PR 之前、重大變更之後以及部署之前執行。
使用時機
- 為 Laravel 專案開啟合併請求之前
- 重大重構或依賴套件升級之後
- 預備環境 (staging) 或正式環境 (production) 的部署前驗證
- 執行完整的 lint → 測試 → 安全 → 部署就緒管線
運作方式
- 依序從環境檢查執行到部署就緒,讓每一層都建立在前一層的基礎上。
- 環境和 Composer 檢查會做為所有後續步驟的閘門;若失敗則立即停止。
- 在執行完整的測試和涵蓋率之前,Linting/靜態分析應保持乾淨。
- 安全性和遷移審查在測試之後執行,以便在進行資料或發布步驟之前先驗證行為。
- 建置/部署就緒以及佇列/排程檢查是最後的閘門;任何失敗都會阻擋發布。
第一階段:環境檢查
php -v
composer --version
php artisan --version
- 確認
.env檔案存在且必要的金鑰已設定 - 在正式環境中確認
APP_DEBUG=false - 確認
APP_ENV符合目標部署環境 (production,staging)
若在本機使用 Laravel Sail:
./vendor/bin/sail php -v
./vendor/bin/sail artisan --version
第一.五階段:Composer 與自動載入
composer validate
composer dump-autoload -o
第二階段:Linting 與靜態分析
vendor/bin/pint --test
vendor/bin/phpstan analyse
若專案使用 Psalm 而非 PHPStan:
vendor/bin/psalm
第三階段:測試與涵蓋率
php artisan test
涵蓋率 (CI):
XDEBUG_MODE=coverage php artisan test --coverage
CI 範例 (格式 → 靜態分析 → 測試):
vendor/bin/pint --test
vendor/bin/phpstan analyse
XDEBUG_MODE=coverage php artisan test --coverage
第四階段:安全性與依賴套件檢查
composer audit
第五階段:資料庫與遷移
php artisan migrate --pretend
php artisan migrate:status
- 仔細審查具有破壞性 (destructive) 的遷移
- 確保遷移檔案名稱遵循
Y_m_d_His_*格式(例如2025_03_14_154210_create_orders_table.php)並清楚描述變更內容 - 確保可以回滾 (rollback)
- 驗證
down()方法,若無明確備份則避免不可逆的資料遺失
第六階段:建置與部署就緒
php artisan optimize:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
- 確保快取熱載入 (warmups) 在正式環境設定中成功
- 驗證佇列工作者 (queue workers) 和排程器 (scheduler) 已設定
- 確認目標環境中的
storage/和bootstrap/cache/目錄可寫入
第七階段:佇列與排程檢查
php artisan schedule:list
php artisan queue:failed
若使用 Horizon:
php artisan horizon:status
若可使用 queue:monitor,則使用它來檢查佇列積壓 (backlog),而不需處理任務:
php artisan queue:monitor default --max=100
主動驗證 (僅限預備環境):將一個空操作 (no-op) 任務分派到專用的佇列,並執行單一工作者來處理它(確保已設定非 sync 的佇列連線)。
php artisan tinker --execute="dispatch((new App\Jobs\QueueHealthcheck())->onQueue('healthcheck'))"
php artisan queue:work --once --queue=healthcheck
驗證該任務產生了預期的副作用 (side effect)(日誌記錄、健康檢查資料表行或指標)。
僅在非正式環境中執行此操作,確保處理測試任務是安全的。
範例
最小流程:
php -v
composer --version
php artisan --version
composer validate
vendor/bin/pint --test
vendor/bin/phpstan analyse
php artisan test
composer audit
php artisan migrate --pretend
php artisan config:cache
php artisan queue:failed
CI 風格的管線:
composer validate
composer dump-autoload -o
vendor/bin/pint --test
vendor/bin/phpstan analyse
XDEBUG_MODE=coverage php artisan test --coverage
composer audit
php artisan migrate --pretend
php artisan optimize:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan schedule:list