Lumen 快速入门简介
PHP
魔王
某人
27人收藏 11368次学习

Lumen 快速入门简介

Lumen 是由Laravel框架作者Taylor Otwell 设计的,全新闪耀登场的一种PHP微型框架。 不过别紧张,Lumen不是设计出来替代Laravel的。实际上,Lumen的设计理念是,用于补充、扩展你的现有的,以及未来的Laravel程序。

Taylor Otwell 在开发Lumen 的时候,有着非常明确的目的,即:微服务(microservices )和API。简单粗暴的说,微服务,就是一种更小规模的、去耦合的业务处理机制,用于和大规模的应用进行交互(例如和Laravel进行交互)。

本文中,我们会谈到Lumen有什么不同,什么时候应该用Lumen,以及如何用好Lumen。后面我们还会谈到如何将我们的Lumen程序整合到整个Laravel程序中去。我们不会涉及到很多代码,因为Lumen和Laravel代码都差不多。

那到底Lumen有哪些新货?

大家肯定最想先问这个问题。实际上,除了一些修改,Lumen的内在并不能说是“新”东西。Lumen用的仍然是Laravel用的那些Illuminate 组件(仅拿掉了一小部分)。你也可以认为Lumen就是瘦身版的Laravel。

Lumen旨在提供最高级别的性能,为了达成这种性能的增加,Lumen做了一些改变。最重要的改变就是下面这几条:

  1. 更少的可配置项。Lumen拿来基本就已经配置好了。实际上你会发现,Lumen根本没有Laravel中的config目录。你可以通过.env文件来设置程序的配置变量。
  2. 不一样的路由机制(Router)。这恐怕就是Lumen能够快到极致的秘密。Lumen不使用Laravel大哥所使用的Symfony 框架的路由机制。Lumen使用一种叫做FastRoute的,轻量级的路由方式,这是由Nikita Popov所开发和提供的。

当然凡事有利必有弊。FastRoute是一种非常快的路由实现机制,但却没有Symfony的组件那么多的功能特性。例如,如果你需要用到子域名,那么你就只能用Laravel了,只有Symfony的路由机制能做到。

另一个不得不说的弊端是,如果你要进行一些组件的细部设置,就要跑到vendor/laravel/lumen-framework目录去。虽然大部分主要设置都可以通过.env文件完成,但还是有一些你想设置的东西设置不了。

 

那我现在就开始用Lumen吗?

我想说的是取决于具体情况,但更有可能不需要,特别是你现在(或者在开发)的程序已经使用了Laravel4或Laravel5。Lumen当然可以干掉一个完整的开发项目,但是她更适合小型的、无耦合的服务和API接口程序。

那我到底何时才开始用Lumen呢?

不说你也知道,我可不能帮你决定何时用某个框架。不过我可以给一些情境,推荐你在这样的情况下,将程序的某些部分用Lumen实现。

我们假设你在做一个大型的网上购物商店。你装上Laravel然后开始开发,把所有功能写在一个单一模块里(monolithic application)。一切顺利,你感觉功能一个个实现了,于是你继续写代码。突然有一天,你发现代码复杂到自己都看不懂了,或者有的功能老是出问题,于是你想,是不是该把代码分成小块小块的,更便于管理的小模块。

这时你应该使用Lumen来分别为每个非耦合的功能创建小程序。举例来说,我们的网店,就应该分出在线支付、邮件通知、订单查询和物流查询这几个部分,作为独立的程序。每个程序都应该作为一个独立的Lumen程序,并且专注于各自被赋予的任务。

为了让我们的主程序与这些小程序进行交互,我们会应用上队列服务,例如亚马逊的简单队列服务Amazon Simple Queue Service (SQS) 。我们用队列来处理业务(Jobs),每个服务会按照队列排序,监听并执行这些业务(Jobs)。这样做的好处就是,每一项服务可以单独掌控和部署,不需要管其他的服务。

同时你也可以使用Lumen该构建API,然后借助类似Guzzle这样的Http客户端组件,在PHP中来访问和处理这些API的数据交互。这样一来,在调整或开发某一项功能时,就完全不会影响到其他的功能。

好吧,那我到底怎么用Lumen?

说到这里,你应该就很清楚何时该上Lumen了。安装Lumen和Laravel基本一样,composer create-project命令即可,或者用lumen命令(详情见Laravel.com官网),这里我们示范Composer命令:

composer create-project laravel/lumen LumenProject --prefer-dist

Composer 会搞定所有的依赖组件。你可以用Artisan马上serve出来来试试看,或者在Homestead上做一个虚拟端口。然后,你就会看到非常简洁炫酷的Lumen展示页,宣告你的Lumen程序已经整装待发。

设置全部在.env文件中完成,你可以吧.env.example改名为.env或另外创建一个新.env。

接下来的要注意的是bootstrap/app.php文件,如果你用了.env文件来配置,就要将Dotenv::load(__DIR__.'/../');的注释去掉。翻看这个文件,你还会看到一些需要取消注释的代码,这里会加载facades、Eloquent、一部分middlewares(中间件),并注册其他的Service Providers(服务提供组件)。

恭喜你,至此,你可以用这个全新的Lumen安装,来实现你惊天地、泣鬼神的神作了。

但是……等等,我果然还是需要Laravel啊!

故事说到,你正在用Lumen构建你惊天地泣鬼神的神作,直到一天,你命运般的发现,你的程序的部分功能,需要用到全栈的完整Laravel框架才能够完成。

不要着急。也不要上火!我们提供一个完全无痛的升级流程。跟着我,左手右手一个慢动作:

  1. 安装一个全新的Laravel5。
  2. 把你的app目录拷过去,注意你可能需要Laravel5的app目录中的一些东西,比如provider。
  3. 把你的配置写到config目录中的相应文件去。
  4. 如果你有定制的bootstrap项,记得在新环境中配置好。
  5. 把路由(route)改过来。由于Lumen用的是FastRoute,你需要将一些路径调整到Laravel的Sympony规范。

这些差不多就是要将Lumen迁移进Laravel框架需要做的事情了。当然,如果你觉得你不需要用到Laravel框架的全部功能,你也可以反过来,将Laravel程序迁移到Lumen中,实现性能的提升。

总结

最后我想指出的是,我推崇的使用Lumen的方式,主要是作为解耦的服务和API用,这也是Lumen本身的思想。并不是说你不能用Lumen来做一个完整的程序,因为她可以做到。如果你想这么做,其实也是可以的。没有什么经典教条来约束什么项目应该用什么框架。你的锅只能自己背。权衡你的选项,为你的项目做好计划,考虑好你的需求,同时别忘了咨询你的团队和同事,并且最后做出无悔的选择。

加入1KE学习俱乐部

1KE学习俱乐部是只针对1KE学员开放的私人俱乐部
标签:
PHP Laravel Lumen