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

  • 相关阅读:
    SD卡测试
    测试人员可能会遇到的问题
    HDU 1024 Max Sum Plus Plus
    HDU 1176 免费馅饼
    HDU 1257 最少拦截系统
    HDU 1087 Super Jumping! Jumping! Jumping!
    poj 1328 Radar Installation
    poj 1753 Flip Game
    HDU 1003 Max Sum
    HDU 5592 ZYB's Premutation(BestCoder Round #65 C)
  • 原文地址:https://www.cnblogs.com/polax/p/14604603.html
Copyright © 2011-2022 走看看