项目组不久前引进了laravel框架,本人参与了laravel的调研和项目架构设计。个人认为项目架构中基于laravel的有些设计还是比较实用和有借鉴性的,现将一些设计分享给大家,希望能和大家共同学习和探讨。特别说明,本文并非对lavarel官方文档的摘抄或总结。

1异常处理

1.1异常类

异常类统一放在app/lib/exception下,可以根据业务模块再细分,对简写的异常类可采用一个文件多个异常类的形式,如:

class HttpRequestException extends Exception

{

}

class HttpResponseException extends Exception

{

}

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

基于laravel4.2的相关架构设计的更多相关文章

  1. 基于WCF大型分布式系统的架构设计

    在大型系统中应用中,一个架构设计较好的应用系统,其总体功能肯定是由很多个功能模块所组成的,而每一个功能模块所需要的数据对应到数据库中就是一个或多个表.而在架构设计中,各个功能模块相互之间的交互点 越统 ...

  2. 浅谈基于Prism的软件系统的架构设计

    很早就想写这么一篇文章来对近几年使用Prism框架来设计软件来做一次深入的分析了,但直到最近才开始整理,说到软件系统的设计这里面有太多的学问,只有经过大量的探索才能够设计出好的软件产品,就本人的理解, ...

  3. 整合微信小程序的Web API接口层的架构设计

    在我前面有很多篇随笔介绍了Web API 接口层的架构设计,以及对微信公众号.企业号.小程序等模块的分类划分.例如在<C#开发微信门户及应用(43)--微信各个项目模块的定义和相互关系>介 ...

  4. 分享一个CQRS/ES架构中基于写文件的EventStore的设计思路

    最近打算用C#实现一个基于文件的EventStore. 什么是EventStore 关于什么是EventStore,如果还不清楚的朋友可以去了解下CQRS/Event Sourcing这种架构,我博客 ...

  5. 基于 Angularjs&Node.js 云编辑器架构设计及开发实践

    基于 Angularjs&Node.js 云编辑器架构设计及开发实践 一.产品背景 二.总体架构 1. 前端架构 a.前端层次 b.核心基础模块设计 c.业务模块设计 2. Node.js端设 ...

  6. GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台

    在当前很多的GPS平台当中,有很多是基于asp.NET+siverlight开发的遗留项目,代码混乱而又难以维护,各种耦合和关联,要命的是界面也没见到比Javascript做的控件有多好看,随着需求的 ...

  7. 基于Struts2,Spring4,Hibernate4框架的系统架构设计与示例系统实现

    笔者在大学中迷迷糊糊地度过了四年的光景,心中有那么一点目标,但总感觉找不到发力的方向. 在四年间,尝试写过代码结构糟糕,没有意义的课程设计,尝试捣鼓过Android开发,尝试探索过软件工程在实际开发中 ...

  8. 微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计(微服务架构实施原理)

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发.部署.运维管理.持续开发持续集成的流程 ...

  9. 三:基于Storm的实时处理大数据的平台架构设计

    一:元数据管理器==>元数据管理器是系统平台的“大脑”,在任务调度中有着重要的作用[1]什么是元数据?--->中介数据,用于描述数据属性的数据.--->具体类型:描述数据结构,数据的 ...

随机推荐

  1. 复杂事件处理——Esper入门(示例程序)

    前面对Esper Quick Start & Tutorial进行了简单描述,希望各位看官能够大致了解what is Esper,甚至对how to work有朦朦胧胧的了解. 开发一个Esp ...

  2. 转:使用Mongo Connector和Elasticsearch实现模糊匹配

    原文来自于:http://www.csdn.net/article/2014-09-01/2821485-how-to-perform-fuzzy-matching-with-mongo-connec ...

  3. WebKit JavaScript Binding添加新DOM对象的三种方式

    一.基础知识 首先WebKit IDL并非完全遵循Web IDL,只是借鉴使用.WebKit官网提供了一份说明(WebKitIDL),比如Web IDL称"operation”(操作), 而 ...

  4. Android Wear计时器开发

    记得在2013年12月的时候,有系列文章是介绍怎么开发一个智能手表的App,让用户可以在足球比赛中记录停表时间.随着Android Wear的问世,在可穿戴设备中开发一款这样的App确实是个很不错的想 ...

  5. 【HDOJ】2609 How many

    循环同构的最小表示法. #include <cstdio> #include <cstring> #define MAXN 10005 #define MAXL 105 cha ...

  6. asp.net 由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值

    看MS给的解决方案:(http://support.microsoft.com/kb/312629/ ) 症状:如果使用 Response.End.Response.Redirect 或 Server ...

  7. Oracle存储过程 --3

    Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常. Oracle存储过程可以有无参数存储过程和带参数存储过程. 一.无参程序过程语法 1 create or replace pro ...

  8. Light OJ 1013 Love Calculator(DP)

    题目大意: 给你两个字符串A,B 要求一个最短的字符串C,使得A,B同时为C的子串. 问C最短长度是多少? C有多少种? 题目分析: 做这道题目的时候自己并没有推出来,看了网上的题解. 1.dp[C串 ...

  9. 【转】中兴G718C卡刷刷机教程(青漾2 4G)--不错

    原文网址:http://www.zterom.com/guide/2278.html 刷机包 B11纯净版 适合长久使用_B11_lite_0130.zip 刷机用了20多分钟. 在和大家分享过中兴G ...

  10. 黄源河《左偏树的应用》——数字序列(Baltic 2004)

    这道题哪里都找不到. [问题描述] 给定一个整数序列a1, a2, … , an,求一个不下降序列b1 ≤ b2 ≤ … ≤ bn,使得数列{ai}和{bi}的各项之差的绝对值之和 |a1 - b1| ...