項目組不久前引進了laravel框架,本人參與了laravel的調(diào)研和項目架構設計。個人認為項目架構中基于laravel的有些設計還是比較實用和有借鑒性的,現(xiàn)將一些設計分享給大家,希望能和大家共同學習和探討。特別說明,本文并非對lavarel官方文檔的摘抄或總結。
1異常處理1.1異常類
異常類統(tǒng)一放在app/lib/exception下,可以根據(jù)業(yè)務模塊再細分,對簡寫的異常類可采用一個文件多個異常類的形式,如:
class HttPRequestException extends Exception
{
}
class HttpResponseException extends Exception
{
}
1.2捕獲機制
可以在任意需要的地方做異常捕獲,如果不捕獲,異常將拋出至最外層。
拋出到最外層的異常,統(tǒng)一在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拋出機制
可在任意可觸發(fā)異常的地方,拋出異常。
RequestLog::request($url, $data, $start, $content);
if (!$content) {
throw new HttpRequestException($url . ':' . $data);
}
2日志記錄分三類log:接口調(diào)用log(RequestLog)、業(yè)務log(LogicaltLog)、調(diào)試log(DebugLog)。日志統(tǒng)一放在app/lib/log目錄下。其中RequestLog可用于接口調(diào)用的統(tǒng)計分析,LogicaltLog可以用于記錄邏輯數(shù)據(jù),DebugLog用于輸出調(diào)試信息(也可直接用laravel自帶的/Log類)。
3任務隊列Laravle封裝了Queue用來做任務隊列,用來做異步處理非常方便。支持: "sync", "beanstalkd", "sqs", "iron", "redis"五種形式。建議用redis,超級好用。
隊列使用方法只要將任務類的類名壓入隊列,并且該任務類實現(xiàn)了fire方法,就可以使用了。
在fire($job, $data)里,我們還可以拿到任務的嘗試次數(shù)$job->attempts() ,可以延遲任務響應時間$job->release(30);還可以刪掉任務$job->delete();。
最后特別提醒,可以通過laravel框架的artisan工具啟動隊列監(jiān)聽:
php ../../../../artisan --env=devqueue:listen&
4 FilterFilter可以用來做參數(shù)驗證、登陸態(tài)檢查、接口調(diào)用日志。
4.1參數(shù)檢查
在app /config/param.php里定義各接口的參數(shù)驗證條件。驗證條件自行參考laravel文檔。
然后在app /Filter.php的Before里,對每一個調(diào)用進行參數(shù)驗證,如:
App::before(function($request))
{
…
$res = Param::verification(Input::all(), $standard);
…
}
4.2接口調(diào)用日志
App::after(function($request, $response)
{
…
RequestLog::log($request, $response);
…
});
5環(huán)境切換通常,我們的框架會有好幾套環(huán)境:正式、測試、本地、沙盒等,不同的環(huán)境配置肯定會有不同。Laravel允許在進程start的時候,指定當前配置環(huán)境,從而做到不同環(huán)境之間的自動切換。
1) 不同的環(huán)境配置目錄:
app/config/dev
app/config/formal
app/config/local
2)bootstrap/start.php指定需要的環(huán)境,例如測試環(huán)境dev
$env = $app->detectEnvironment(‘dev’)
3) 如何自動切換?
我們可以做到根據(jù)接口請求訪問的域名不同,指定相應的環(huán)境。比如dev.domain.com為測試環(huán)境,domain.com為正式環(huán)境。
新聞熱點
疑難解答