为什么Laravel会脱颖而出

1,942 阅读12分钟
原文链接: phpcasts.org

在动态Web开发的早期,编写一个Web应用看起来是非常不同和当今相比。开发者们不仅要为我们的应用负责写业务逻辑,而且还要为整个应用或网站写一些比较常用的组件,比如用户认证、输入校验、数据库访问、模板等等。

今天,开发者们有非常多的应用开发框架,上千个组件和容易获取的类库。程序员们也经常谈论到:等到你学完一个框架的时候,多个新的(据说也不错)框架已经出来了,而且有取代之前框架的趋势。

"就因为它在那里", 这也许是爬山的正当理由,但是也有更好的理由选择一个特定的框架或者完全使用一个框架。

有一个非常值得问的问题:

为什么要选择框架? 更特别的是,为什么是Laravel?

为什么要使用一个框架

很容易看出为什么使用单独的组件或者包是有益的。对于这些包,其他人负责去开发和维护这些明确定义的独立代码。理论上那个人对这单个组件有时间去理解的更加深入。

像Laravel、Symfony、Silex、Lumen和Slim这些框架,都是通过预组装一些第三方组件而做成的一个框架,比如像配置文件,服务提供者,目录结构和应用启动,当然各自方式有所不同。所以整体来讲使用框架的好处就是:有人已经帮我们做好了一个单独的组件,同时也提供给我们去如何使用的方法。

自己动手做

让我们来说说,如果没有框架的好处来新建一个web应用。

首先,你从哪开始?好,你可能先需要一个HTTP请求的路由,所以你需要去调研所有可用的http请求和和响应类库,然后选择一个。路由选定之后,你也可能需要去设置某种形式的路由配置文件。那它应该使用什么样的语法呢?它又应该放在哪里呢? 控制器呢?它们又放在哪里?又是怎样被加载? 你可能需要一个依赖注入容器去解决控制器和他们的依赖。 但是,用哪一个呢?

而且,如果你花时间解决了所有的问题,也成功的创建了一个应用,那么这样做对下一个开发者的影响呢?当你有3个这样的自定义框架的应用,或者更多呢? 你必须去记住每一个应用的控制器放在了哪里?或者 路由语法是怎么样的? 等等。

一致性和灵活性

在这里我们应该使用哪一个组件? 框架其实已经对这个问题提供了一个深思熟虑的答案。并且框架可以确保选择的那些组件在一起可以很好的工作。另外框架也提供了一些规范,这些规范可以使我们去减少新人对项目代码量的理解。如果你理解在一个Laravel项目中路由是如何工作的,那你也就理解了在所有Laravel项目中路由是如何工作的。

Web和PHP框架的简史

可能去回答"为什么是Laravel"这个问题一个重要的部分就是理解Laravel的历史,理解之前发生了什么。实际在Laravel流行之前,在PHP语言里有非常多的框架,其他web开发语言也是如此。

Ruby on Rails

David Heinemeier Hansson 在2004年发布了第一个Ruby on Rails版本,而在那时也很难找到一个web应用开发框架,这在某种程度上没有受到Raisl的影响。

Rails推广MVC, RESTful JSON API,约定优于配置,ActiveRecord,以及其他很多的工具和约定,而这些工具和约定对Web开发人员接近他们的应用程序的方式产生了深远的影响,特别是在快速应用开发方面。

框架的大量涌入

大多数开发人员很清楚,Rails和类似的Web应用程序框架是未来的潮流,PHP框架,包括那些被公认为模板Rails的框架,开始迅速出现。
CakePHP是2005年第一个出现的,不久之后,Symfony、CodeIgniter、Zend Framework和Kohana(CodeIgniter的一个分支)接着发布了。Yii 在2008年出现的,Slim在2010出现。在2011 FuelPHP和Laravel也出现了,两者都不是很完美,但是可以作为替代方案。

其中一些框架更像是Rails, 侧重于数据库对象ORM, MVC结构和其他快速开发的工具。而另一些框架,比如Symfony和Zend, 则更多的关于企业设计方案和电子商务。

CodeIgniter 框架的优点和缺点

CakePHP和CodeIgniter是两个比较早的PHP框架,他们的灵感或多或少来自于Rails。CodeIgniter的名气快速上升,到2010年可以说是最受欢迎的PHP框架。

CodeIgniter简单易用, 并且拥有令人惊叹的文档和一个强大的社区。但其对现代技术和先进模式使用比较缓慢,随着框架世界的发展和PHP工具的进步,CodeIgniter开始在先进技术和开箱即用功能方面落后于后者。与许多其他框架不同,CodeIgniter是由一家公司管理,他们很难赶上PHP5.3的新功能,比如命名空间以及迁移到Github和后来的Composer。在2010年,Laravel的创始人Taylor Otwell对使用CodeIgniter
感到不满足,所以开始编写自己的框架。

Laravel 1,2,3

Laravel 1 的第一个beta版是在2011年6月发布,完全从头开始写起。 功能主要专注于自定义的ORM(Eloquent), 基于闭包的路由, 一个扩展模块系统, 对于表单的验证, 认证助手等等。

早期Laravel的发展迅速,Laravel2和3分别在2011年11月和2012年2月发布。它们包含的功能有:控制器,单元测试,命令行工具,控制反转(IoC)容器, Eloquent关系和迁移。

Laravel 4

对于Laravel4, Taylor从头开始重写了整个框架。那时Composer,一个先进的包管理工具,正在显示出成为行业标注的迹象,Taylor看到了将框架重写为组件集合,由Composer分发和捆绑在一起的价值。

Taylor以代码Illuminate命名下开发了一系列的组件,,在2013年5月,以全新的结构发布了Laravel4。而不是捆绑大部分代码作为下载,Laravel现在从Symfony(另一个发布组件供其他组件使用的框架)和Illuminate组件通过Composer拉取大部分组件。

Laravel4还引入了队列,邮件组件,facades和数据库迁移。由于Laravel现在还依赖于Symfony组件,所以它宣布Laravel将反映Symfony随后六个月的发版计划。

Laravel 5

Laravel 4.3是计划于2014年11月发布,但随着开发的进展,显然其变化的重要性值得一个重大发布,所以Laravel 5于2015年2月发布了。Laravel 5改进了目录结构,删除了表单和HTML助手,引入Contract接口,大量新试图,Socialte社交化媒体认证,用于资源编译的Elixir, 用于简化Cron的调度程序,用于简化环境管理的.env,还有表单请求和全新的REPL(read-evaluate-print loop).

Laravel的特别之处是什么

那么Laravel的不同之处是什么呢?为什么无论如何它比其他框架更值得去拥有? 因为它们所有的组件来自Symfony, 对吧?让我们来了解一下,什么使Laravel如此特别。

Laravel的哲学

你只需要阅读Laravel的推广资料和README就可以看到其存在的价值。Taylor喜欢使用光照相关的词来形容他的作品,比如Illuminate, Spark

这个框架最值得传播的两个价值就是 提高开发者的速度开发者的幸福感。Laravel的核心是提供更好的装备来支持开发人员。其目标是提供清晰,简单,优美的代码和功能,帮助开发人员快速学习,开始和开发,编写简单、清晰且持久的代码。

针对开发人员的概念在Laravel官方材料中已经很明显。文档中写着:让开发者可以开心的写出最好的代码
开发者从下载到部署都是快乐的 是那一段时间的非官方口号。

当然,任何工具或框架都说喜欢让开发人员感到快乐。但将开发者的幸福感作为主要关注点,而不是次要的,对Laravel的风格和决策进程产生了巨大的影响。在其他框架可能把建筑纯度作为他们的主要目标,或者与企业开发团队的目标和价值兼容的情况下,Laravel主要的关注点是服务于个人开发者。

Laravel如何实现开发人员的幸福感

刚刚说的让开发者快乐是一件事,做就是另一回事了,试问自己:在一个框架里最可能让我们感到不快乐的事情是什么,什么又最可能让我们感到快乐?Laravel试图让开发人员的生活更轻松。

首页,Laravel是一个快速应用开发框架。这也意味着它专注于一个简单的学习曲线和将开始一个应用到发布之间的步骤最小化。这些都是构建一个web应用最常见的任务,从数据库交互到认证、队列,邮件,缓存,都通过Laravel提供的组件变得更简单。Laravel的组件不仅很棒,而且也提供了一致的API和可预测的结构。那也就意味着当你用Laravel写一些新东西的时候,你可能最终会说,它正常工作。

还不以这个框架结束,另外Laravel还提供了一个完整的生态系统用于构建和启动应用的工具。你可以用HomesteadValet做本地开发,用Forge做服务器管理,Envoyer进行高级部署。还有一些额外的组件包:Cashier为做支付和订阅,Echo用作WebSocket, Souct用作搜索, Passport用作API认证,Socialite用作社会化登录,Spark用作引导你的Sass。 Laravel尝试去做开发人员重复的工作,以便于他们可以去做其他的事情。

其次,Laravel专注于约定高于配置, 意思就是如果你愿意去使用Laravel的一些默认配置,你也可以少做很多工作相比去其他你需要去定义所有配置,甚至你使用推荐配置的框架。构建在Laravel上的框架花费更少的时间比构建在其他大多数的PHP框架。

Laravel深度关注简单性。 用Laravel如果你愿意,使用依赖注入,mokc,数据映射模式,repository, 命令行查询,更复杂的结构查询都是可能的。但是其他的框架可能会建议每个项目使用这些工具和结构,而Laravel和它的文档以及社区更倾向于以最简单的实现开始,比如全局函数,facade,ActiveRecord等。这也就允许开发者们去创建最简单的应用以满足他们的需求。

Laravel与众不同的一个有趣来源是其创建者和社区是与Ruyb和Rails以及函数式编程语言相比,更多地与Java相关,并且受其启发。现代PHP中又一个强大的趋势是倾向于繁琐和负责,包含了更多的Java特性。但Laravel倾向于另一面,包含表达式,动态性和简单的面向实践和语言特征。

Laravel社区

如果该系列是你第一次接触到Laravel社区,那么你有一些特别的期待。Laravel一个突出特点是促进了它的发展和成功。从Jeffrey Way的Laracasts视频教程到Laravel News到Slack和IRC频道,从twitter到博主,到Laracon会议,Laravel都有一个充满活力的社区。

Taylor 从Laravel 早期就理解到,一个成功的开源项目需要两件事:好的文档一个受欢迎的社区。这两件事情Laravel都做到了。

Laravel如何工作

到目前为止,这里所说的一切整个都比较抽象。你可能会问,代码怎么样? 让我们来一起看一个简单的应用,以便你能看到Laravel实际是如何工作的。

// File: routes/web.php
<?php

Route::get('/', function(){
    return 'Hello, World!';
})
?>

在Laravel应用中你能做的最简单的动作就是定义一个路由,然后返回一个结果,当有人通过那个路由访问的时候。 如果你在你自己的机器上初始化了一个Laravel应用,定义上面的路由,那你可以在public目录里启动你的站点,然后自己访问。访问结果就是

Hello World!

看起来是不是类似于控制器? 来看下控制器是怎么实现的

// routes/web.php
<?php
Route::get('/','WelcomeController@index');

// app/Http/Controllers/WelcomeController.php
<?php

namespace app\Http\Controllers;

class WelcomeController
{
    public function index()
    {
        return 'Hello, World!';
    }
}

为什么是Laravel?

所以,说了这么多,知道为什么是Laravel了吧?

因为Laravel可以帮助你将你的想法变为现实,而且不会浪费代码,使用现代编码标准,由充满活力的社区所包围,并且拥有强大的工具生态系统。

所以作为开发者的我们,应该感到高兴。 不是吗?^_^