基於laravel4.2的相關架構設計

項目組不久前引進了laravel框架,本人蔘與了laravel的調研和項目架構設計。我的認爲項目架構中基於laravel的有些設計仍是比較實用和有借鑑性的,現將一些設計分享給你們,但願能和你們共同窗習和探討。特別說明,本文並不是對lavarel官方文檔的摘抄或總結。php

1異常處理

1.1異常類laravel

異常類統一放在app/lib/exception下,能夠根據業務模塊再細分,對簡寫的異常類可採用一個文件多個異常類的形式,如:redis

class HttpRequestException extends Exceptionbootstrap

{架構

}app

class HttpResponseException extends Exception框架

{dom

}異步

1.2捕獲機制工具

能夠在任意須要的地方作異常捕獲,若是不捕獲,異常將拋出至最外層。

拋出到最外層的異常,統一在app/start/global.php文件中定義handler

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日誌記錄

分三類log:接口調用log(RequestLog)、業務log(LogicaltLog)、調試log(DebugLog)。日誌統一放在app/lib/log目錄下。其中RequestLog可用於接口調用的統計分析,LogicaltLog能夠用於記錄邏輯數據,DebugLog用於輸出調試信息(也可直接用laravel自帶的\Log類)。

3任務隊列

Laravle封裝了Queue用來作任務隊列,用來作異步處理很是方便。支持: "sync", "beanstalkd", "sqs", "iron", "redis"五種形式。建議用redis,超級好用。

隊列使用方法只要將任務類的類名壓入隊列,而且該任務類實現了fire方法,就可使用了。

在fire($job, $data)裏,咱們還能夠拿到任務的嘗試次數$job->attempts() ,能夠延遲任務響應時間$job->release(30);還能夠刪掉任務$job->delete();。

最後特別提醒,能夠經過laravel框架的artisan工具啓動隊列監聽:

php ../../../../artisan --env=devqueue:listen&

4 Filter

Filter能夠用來作參數驗證、登錄態檢查、接口調用日誌。

4.1參數檢查

在app /config/param.php裏定義各接口的參數驗證條件。驗證條件自行參考laravel文檔。

而後在app /Filter.php的Before裏,對每個調用進行參數驗證,如:

App::before(function($request))

{

$res = Param::verification(Input::all(), $standard);

}

4.2接口調用日誌

App::after(function($request, $response)

{

RequestLog::log($request, $response);

});

5環境切換

一般,咱們的框架會有好幾套環境:正式、測試、本地、沙盒等,不一樣的環境配置確定會有不一樣。Laravel容許在進程start的時候,指定當前配置環境,從而作到不一樣環境之間的自動切換。

1)  不一樣的環境配置目錄:

app\config\dev

app\config\formal

app\config\local

2)bootstrap/start.php指定須要的環境,例如測試環境dev

$env = $app->detectEnvironment(‘dev’)

3)  如何自動切換?

咱們能夠作到根據接口請求訪問的域名不一樣,指定相應的環境。好比dev.domain.com爲測試環境,domain.com爲正式環境。

相關文章
相關標籤/搜索