首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Laravel 4.2 架構設計實戰:異常、日誌、隊列、過濾器與環境切換

     編輯:PHP 相關知識

Laravel 4.2 架構設計實戰:異常、日誌、隊列、過濾器與環境切換

Laravel 4.2 雖屬舊版本,但其架構思想在現代 Laravel (5.x/8.x/10.x) 中延續至今。本文分享實戰項目中關於異常處理、分類日誌、任務隊列、過濾器驗證、多環境配置的標準化設計模式,具備極高參考價值。

1. 異常處理體系

1.1 異常類組織

// app/lib/exception/HttpException.php
class HttpRequestException extends Exception {}
class HttpResponseException extends Exception {}

按業務模塊劃分目錄,簡單異常可合併在單文件。

1.2 全局捕獲與統一響應

// app/start/global.php
function handleException($code, $exception) {
    return Decorate::failed($code, null, $exception->getFile() . ':' . $exception->getLine() . ',' . $exception->getMessage());
}

App::error(function(HttpRequestException $exception, $code) {
    return handleException(-1007, $exception);
});

App::error(function(HttpResponseException $exception, $code) {
    return handleException(-1008, $exception);
});

1.3 業務拋出

RequestLog::request($url, $data, $start, $content);
if (!$content) {
    throw new HttpRequestException($url . ':' . $data);
}

2. 分類日誌系統

三類日誌分離存儲 app/lib/log/:

  • RequestLog:接口調用統計(耗時、參數、響應)
  • LogicalLog:核心業務流程關鍵節點
  • DebugLog:開發調試信息,上線可關閉

3. 任務隊列 (Queue)

// 推送任務
Queue::push('SendEmailJob', ['user_id' => 123, 'template' => 'welcome']);

// 任務類實現 fire 方法
class SendEmailJob {
    public function fire($job, $data) {
        // 發送郵件邏輯
        $job->delete(); // 刪除任務
        // 或延遲重試
        // $job->release(30); // 30秒後重試
        // 獲取嘗試次數
        // $attempts = $job->attempts();
    }
}

啟動監聽:php artisan queue:listen --env=dev &(建議使用 Supervisor 進程管理)

驅動選型:Redis > Beanstalkd > Database > Sync,Redis 性能最優且支持延遲隊列。

4. 過濾器 模式

4.1 參數驗證

// app/config/param.php 定義各接口驗證規則
// app/filters.php
App::before(function($request) {
    $standard = Config::get('param.' . Route::currentRouteName());
    $res = Param::verification(Input::all(), $standard);
    if (!$res) throw new ValidationException('參數錯誤');
});

4.2 接口調用日誌

App::after(function($request, $response) {
    RequestLog::log($request, $response);
});

5. 多環境自動切換

5.1 目錄結構

app/config/
├── dev/      # 開發環境
├── formal/   # 正式環境
└── local/    # 本地環境

5.2 引導文件檢測

// bootstrap/start.php
$env = $app->detectEnvironment([
    'dev'    => ['dev.domain.com'],
    'formal' => ['domain.com'],
    'local'  => ['localhost', '*.local'],
]);

5.3 域名自動識別原理

Laravel 根據 $_SERVER['HTTP_HOST'] 匹配數組鍵名,命中即加載對應目錄配置,實現零代碼修改部署多環境。

架構設計核心原則總結

  1. 關注點分離:異常、日誌、隊列、驗證各司其職
  2. 約定優於配置:統一目錄結構、命名規範、響應格式
  3. 可觀測性優先:全鏈路日誌、異常堆棧、隊列監控
  4. 環境隔離:配置與代碼分離,部署無感知

這些模式在 Laravel 現代版本中依然適用,只是實現方式升級為 Service Provider、Middleware、Event/Listener、Custom Exception Handler 等更優雅的機制。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved