微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

laravel的优点

作者:怪物程序员
链接:https://www.zhihu.com/question/27453375/answer/284721903
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

快速入门对Laravel是不合适的,因为它是为web工匠打造的工具。

第一,Composer与Laravel没有直接的关系,这一点,已经有朋友回复了,composer是PHP中的一个自动加载包的工具,它只是一个接口,Laravel只是遵循了这个接口,没有它,你直接从github里下载Laravel也没有问题。这种类似的工具还有PHPunit等。

第二,Laravel使用的服务容器才是它和其他包交互的真正方式,如果你需要一项服务,比如Eloquent 关系映射器,只需要在容器中注册以后就能用了,这种调用第三方工具或插件方法不是降低了灵活性,反而提高了灵活性,你需要什么就调用什么,真正的核心内容却很精简。

第三,大家遵循相同的接口并不是说大家造出来都是同样的轮子,比如,类,接口,它们都有同样的东西,但不能说它们都一样。

第三,Laravel的安全性,如果楼主了解过Laravel的安全机制的话,Laravel对Post表单有csrf密码保护机制,用户注册密码也有相应自带的加密机制,随意去看一下Laravel的用户注册、认证等文档或是代码,应该可以发现Laravel的安全性是非常高的。

第四,开发速度,在通信行业中有这么一句话:“速度和效率是不可兼得的”,从某种程度上来说,使用框架的开发速度肯定比不是直接来一句echo语句那么高,这一点也同样有人回答过;开发速度和效率的权衡取决你的项目大小和维护时间长度

 

 

上面是针对楼主提出的问题做的答复,有人说Laravel难,还有人觉得Laravel是噱头,但是还是忍不住想说说Laravel的种种优点:

1.测试方便,Laravel整合了PHPunit的所有PHP测试,另外自己还有一些测试辅助方法包括了单纯使用PHPunit下复杂的数据库数据问题,laravel为测试提供了一些选项,能够在不影响实际数据库的情况下进行数据库测试,另外还能直接对浏览器中的元素进行测试,如按钮,链接等,可以说非常方便,laravel支持PHPunit、数据库测试、HTTP请求测试以及浏览器元素测试。

2.与Eloquent的强大的数据库关系映射模型,在编写网站的过程中,处理数据其实才是大头,而Laravel使用了Eloquent,这意味着什么呢?如果你有一个用户数据表User,还有一个文章数据表Post,你只需要在PostController中声明一个user()方法,然后里面写上$this->belongsTo(),这样就把用户文章的一对多关系确立了,然后调用$post->user就可以获得这篇文章的拥有用户了,是不是很方便?这只是其中一个关系,对于各种复杂的数据库,Eloqent都运行的很好。

3.tinker对PHP的调试功能,看到这里,你可能会说,PHP也有调试功能?这里的调试功能当然不是像在java或c++中一样有断点什么的,而是REPL(读取-求值-输出-循环),如果你熟悉python,这个应该很简单,比如进入tinker,然后在命令行界面中,输入echo ‘hello world',它就会立刻输出hello world,当然这个功能很简单,但是所有的其他PHP语句都可以在tinker中运行,甚至你可以定义变量。

4.工厂生成数据factory,这一点还是针对测试的,比如你在本地需要大量的user数据,那么你可以直接创造一个user factory,然后你直接输入factory(user, 50)->create(),立马就能生成50条数据到数据库,当然你也可以使用make,这样只生成数据而不保存到数据库,并且Laravel允许你选择生成数据的类型,比如单词、句子、段落、数字等。

5.强大的blade视图模版语言,在PHP中,可能会经常遇到要输出同样的form元素,或是error显示错误等,可以把这些定义在一个文件中,比如error.blade.PHP,然后需要这个模版的时候只需要include(error)即可,这样可以减少很多重复的代码,而且blade支持传递变量,对于mvc模式来说,这个blade模版语言非常的方便。

6.强大的表单验证功能,只需要编写一个validation函数,Laravel会处理表单字段,比如你要限定某个input最少要6个字符并且必填,可以使用min:6|required来限定它,Laravel会自动处理它;这是PHP的常用功能。诸如此类针对常用功能的还有:分页功能,在Laravel中极其简单;闪存功能,可以保存用户填写的表单,如果出错,会自动保存一次数据;邮件功能用户注册经常要用的,Laravel支持它;等等我一下子记不起的其他优点。

7.就是它的artisan命令行功能,当你要创建一个数据模型,你可以使用PHP artisan make:model,当你要创建一个控制器,可以使用PHP artisan make:controller等等,还可以使用PHP artisan tinker来运行tinker,还可以使用PHP artisan magrite:rollback来回滚数据操作等。

8.讲到这里,它使用migrate来管理数据库难道不是一个非常亮的优点吗?版本控制的数据库,当你的数据出了问题,你随时可以回滚,可以回到从前的数据,当增加了新的数据表,或是更新了数据库,数据也不会丢失

 

在讲这些优点的时候,我甚至都不敢说它语言优美,代码简洁;Laravel因为这个已经被喷得太惨了,有人说语言优美有屁用,代码简洁又如何,总之它不容易上手。emmmm,我通常不去争辩这些,因为这些人通常也不会学习英语,也不会重构代码;Laravel对名词的单复数做得非常好,如果会英语,一路读过去应该没什么障碍,它的链式语言确实很优美,这里我可以举一个例子,(其实前面我举例的函数大家应该感受到了),来一个查询构造器:

$users = DB::table('users')
     ->whereColumn([
     ['first_name', '=', 'last_name'],
     ['updated_at', '>', 'created_at']
     ])->get();

我不说这段代码什么意思,大家都能看懂。代码简洁的好处是,在你遇到问题的时候,可以一路追究到它的源代码,并且没有阅读障碍。另外,据我估计,Laravel的源码每个函数代码应该没有超过20行,这有什么用?当你阅读任何一个函数时都知道它在干什么!

至于Laravel本身的框架,有人说服务容器没什么高级的,只不过是工厂模式加上一些其他的实现罢了,我不反驳,因为我还没有去阅读过Laravel核心的代码,但是,很多伟大的事情本来就很简单,就像约翰卡马克说的那样,“根据摩尔定律,某个时间点上要极其聪明的图形程序员才能做出来的东西,若干年后,只要能力还可以的程序员就可以复制出来”。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐