zoukankan      html  css  js  c++  java
  • 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核心的代码,但是,很多伟大的事情本来就很简单,就像约翰卡马克说的那样,“根据摩尔定律,某个时间点上要极其聪明的图形程序员才能做出来的东西,若干年后,只要能力还可以的程序员就可以复制出来”。

  • 相关阅读:
    软件测试第四周--闰年问题的非法输入处理
    Edit Boxing三个盒子——等价类划分以及实现
    软件测试--等价类划分的基本概念及实际应用
    对软件测试工具的认识
    软件测试的流程及策略
    几种简单的软件测试模型
    软件开发中的白盒测试
    一种简单的软件测试工具——Visual Studio2010
    int Parse方法引发的异常
    两种软件测试框架——JUnit和NUnit
  • 原文地址:https://www.cnblogs.com/polax/p/14604603.html
Copyright © 2011-2022 走看看