基于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为正式环境。

相关文章
相关标签/搜索