PHP框架世界的新宠——Laravel

最近这些年,一个新的名词越来越多地出现在PHP开发领域的各种技术文献和大家热议的话题中:Laravel。

laravel-logo.jpg

什么是Laravel?这个念起来有些拗口的单词(官方发音是/’lærəvəl/),简而言之,就是一款PHP开发框架。我们可以先去它的官方主页看一眼:https://laravel.com/。虽然PHP世界向来都是百花齐放,但这新颖的Logo和清爽脱俗的页面设计,以及映入眼帘“beautiful”,“artisans”等字眼,甚至不太容易让人一下子联想到这是一款给程序员使用的产品。

Laravel有多火?

说起PHP框架,大概每个程序员都能如数家珍:CodeIgniterCakePHPYiiSymfonyZend Framework,当然还有国产的ThinkPHP, 不一而足。但是Laravel这些年到底有多火?我们去Google Trends上看一下上述几款同类产品的热搜程度或许能有一些粗略的概念。

这是过去12个月的数据,红黄绿紫色的曲线分别代表CodeIgniter、CakePHP、Yii和Zend Framework,而蓝色线代表Laravel,已经是“高高在上”了,而且还在呈持续上升之势。

 

gt-past-12mon.png

如果把时间区间再往前推到过去5年(Laravel诞生至今不过短短五年),蓝线的走势就有点让人望而生畏了,可以说几乎没有任何一款PHP框架产品的流行趋势可以与之匹敌。

 

gt-past-5y.png

把眼光从时间纬度转向空间维度,结果同样让人惊讶。

gt-region.png

 

可以看到,整个南北美洲、欧洲以及亚太地区都已经几乎被蓝色覆盖了,而且要知道这是Google的数据,其中关于中国大陆的数据很可能是极不准确的。实际上在中国,Laravel也早已进入大家热议的话题,甚至有很多已经抛弃PHP的程序员因为Laravel而重回PHP的怀抱。那么,Laravel到底有些什么样的魔力呢?

Laravel到底好在哪里?

其实,Laravel和诸多PHP甚至其他编程语言框架一样,在逻辑架构上并没有什么独特之处。

laravel-mvc-components.png
(图片来源:http://laravelbook.com/laravel-architecture/

从上图可以看到,Laravel就是一个典型的单入口MVC架构。首先,路由机制将用户请求的路径映射到一个特定的控制器,控制器执行业务逻辑,期间会与模式(数据库)发生交互,不外乎CRUD四种操作,并最终调用相应的视图将结果渲染出来,发送给客户端。整个过程与我们熟知的其他应用框架何其相似?

优雅而简洁的代码

打开Laravel的官方首页,最显眼的是这样两行字:

Love beautiful code? We do too.
(喜欢漂亮的代码吗?我们也是。)

The PHP Framework For Web Artisans
(给Web匠人们用的PHP框架)

这两句话大概精确地概括了Laravel的一切追求。除了文档之外,Laravel的代码本身是自解释的,写代码和写文章一样直观。百度百科的Laravel页面上的这个例子非常直观地说明了这一点:

代码A:$uri = Uri::create(‘some/uri’, array(), array(), true);

代码B:$url = URL::to_secure(‘some/uri’);

假设代码A和代码B做的是同一件事,你会选择哪个?答案毫无疑问是后者——上面那句的后半段让人摸不着头脑,而下面那句简直就像英语对话一样直接。试想整个框架的语言都是这种风格的,能让人不爱么?

Laravel的这个优点很容易让人联想到Ruby当年的流行,是的,真正打动人的优点不要多,一个足矣。

Eloquent

Eloquent相当于Ruby on Rails里面的ActiveRecord,就是一个数据抽象层,可以让开发者在完全忘掉SQL的情况下轻松完成数据的查、删、增、改。具体的代码也是可爱到无以复加:

// 获取所有Task数据
$tasks = Task::all();

// 获取id为1的Task
$task = Task::find(1);

// 更新id为1的Task
$task = Task::find(1);
$task->title = 'Put that cookie down!';
$task->save();

// 创建一个新的Task
Task::create([
    'title' => 'Write article'
]);

// 删除id为1的Task
Task::find(1)->delete();

命令行工具Composer和Artisan

Laravel支持命令行扩展包安装工具Composer,可以像很多开源软件一样通过命令行安装扩展包。Laravel还有自己的命令行管理工具,名字也很任性,就叫做Artisan,Artisan包含很多常用的项目管理工具,使用Artisan比手工操作和界面操作都来得更高效更可靠。

前端和主题开发者应该关心的

Laravel的模版引擎有个很酷的名字叫作Blade,主题和前端开发者几乎无需学习PHP就可以轻松掌握。Blade的亮点之一是可以嵌套,从而增强代码的重用性。关于Blade的更多信息可以在这里查看:https://laravel.com/docs/5.3/blade

对于非网页前端,Laravel有提供RESTful资源的控制器,更多信息可访问:https://laravel.com/docs/5.1/controllers#restful-resource-controllers

Laravel还有一个前端好伙伴叫做Backbone,可以有效地避免意大利面条式的代码(spaghetti code),关于Backbone的更多信息可访问:http://backbonejs.org/

对我们来说意味着什么?

我觉得Laravel首先会让我们反思我们的工作。有一点是肯定的,我们都喜欢简单而不是复杂的东西。我们使用框架、使用CMS,归根结底还是为了简化我们的工作。比如我们前段时间的一个简单的内部项目,我就建议团队抛弃任何CMS,使用纯HTML来完成开发。和我预期一样,开发效率并不比使用CMS低,而且纯HTML占用更少的服务器资源,网站快如飞。那么,我们使用CMS的意义到底在哪里呢?我们是使用所掌握的技术来为项目服务,还是为技术所限制甚至摆布?这是值得我们去思考的。

前端和UI设计师们可能会觉得这离自己有点远,但Laravel所崇尚的从整体到细节的完美追求,同样是我们每个人学习的榜样,更不要说Laravel诸多旗下网站(laracastsForgeEnvoyerLaraAdmin等),本身的UI和交互设计以及前端就是非常值得学习的。(参见:http://codecondo.com/15-websites-built-with-laravel

最后,如果一定要扯一些个人情节的话,Laravel诞生在纽约,而且Laravel的UI设计团队和我们纽约办公室相去不远,这也许是我个人觉得她亲切的原因之一吧。