热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

优秀PHP优秀框架Laravel和Yii的详解

如果您向任何经验丰富的Web应用开发人员询问,什么是他们首选的编程语言的话,他们的回答居多会提到PHP。的确,PHP是一种被广泛使用的通用脚本语言,特别适用于Web开发,并且可以被嵌入到HTML中。根



如果您向任何经验丰富的Web应用开发人员询问,什么是他们首选的编程语言的话,他们的回答居多会提到PHP。的确,PHP是一种被广泛使用的通用脚本语言,特别适用于Web开发,并且可以被嵌入到HTML中。

根据网站技术分析工具Builtwith的统计,目前有3,090,319个实时网站仍在使用着PHP。当然,在开发低延迟、高稳定性的大型项目时,开发人员往往倾向于使用某种框架。其中,Laravel和Yii是当前两种针对PHP的优秀框架。它们在全球都有成熟的社区、以及大量的编程爱好者。下面,我为您全面比较Laravel和Yii,并和您讨论如何根据具体项目在两者中做出选择。

一、到底什么是Laravel和Yii?

Laravel是一个简单的PHP框架,经常被用于基于Web或Web应用的开发,最初是作为Codeigniter的更好替代品而创建的。它以支持MVC、协同ORM系统、可靠性、模块化、以及简单的编程规则而闻名。总的说来,Laravel框架具有如下关键特性:

  • Artisan:Artisan是一个命令行工具,可以让您轻松地创建模型、控件、计划任务、以及运行各种自定义的命令。

  • Eloquent:Eloquent是一个对象关系映射(Object-Relational Mapping,ORM)型数据库的交互式框架。

  • 不同的数据库支持:Laravel为当前可访问的每一种数据库格式提供了代码包。它通过允许迁移操作,来保证数据库的修改和版本控制。

  • Blade Template Engine:它允许在视图中使用简单的PHP代码。为了避免应用的过载,视图一旦被构建和缓存,就会被保持,直至它们被再次更新。

  • Vast Laravel Libraries:开发人员可以在自己的应用程序中,安全地使用数百个标准化的Laravel代码库。该框架的设计者还提供了定期更新的官方文档,以便开发者进行广泛地使用。
  • Yii是2006年作为PRADO框架的继承者被发布的。作为一个可被用于快速开发现代化Web应用的开源式PHP框架,它具有基于组件的架构和完整、可靠的缓存支持。开发人员可以使用Yii框架,去构建诸如:论坛、门户、内容管理系统、RESTful服务、以及电商网站等各种Web应用。总的说来,Yii框架具有如下关键特性:

    全面支持DBMS:Yii框架支持PostgreSQL、MySQL、SQLite、Oracle、以及其他DBMS。

    支持第三方模板引擎:Yii框架没有内置的模板引擎支持,但是可以使用第三方的解决方案。

    强大的知识库:其官方文档和丰富的教程可以帮助开发人员快速地找到大部分问题的答案。

    自动化代码生成:开发人员可以通过使用Gii的扩展,来自动生成代码,从而显著地加快编程的进程。

    可见,这两个框架都是非常棒的Web开发的框架。当然,它们也有着本质上的不同。

    二、Laravel与Yii之间的不同之处

    1.安装

    这两种框架都可以运行在PHP 5.4或更高的版本上。不过,Laravel需要诸如:PHP JSON和MCrypt PHP等额外的扩展,而Yii已经内置了它们。此外,您可以通过下载压缩文件,并将其解压缩到Web应用可以拿到的文件夹中,来安装Yii。同时,您还可以使用Composer(一种PHP 包管理工具 )来安装它,并配置访问令牌。而对于Laravel来说,您可以使用Laravel Installer或Composer来安装它。

    得分:Laravel得1分:Yii得1分

    2.基于场景的验证

    Laravel没有任何可用于执行基于场景验证的代码包。而在Yii框架中,用户可以使用各种请求参数来分配模型,并对其进行验证。

    得分:Laravel得1分:Yii得2分

    3.客户端验证

    Laravel并没有任何代码包可执行客户端的验证。而Yii由于提供了开箱即用的Javascript验证,因此它允许您通过只定义一组模型规则,以用于在服务器端和客户端进行验证。

    得分:Laravel得1分:Yii得3分

    4.路由功能

    Laravel虽然提供了资源路由(resource routing),但是您需要为所有控制器中的每一项操作,去声明一条路由。而Yii框架的默认选择便是逐个路由操作的模式,因此您无需进行反复操作,仅凭一个简单的路由即可。

    得分:Laravel得1分:Yii得4分

    5.CRUD(增加(Create)、检索(Retrieve)、更新(Update)和删除(Delete))的生成

    许多项目会使用管理面板,来实现各种数据表的CRUD功能。而作为Yii中的一个专用扩展,Gii提供了一个基于Web的界面,可以自动生成各种常用的交互式代码片段。不过Laravel并不能默认支持CRUD的生成。

    得分:Laravel得1分:Yii得5分

    6.扩展支持

    通过不同的扩展,我们往往能够让原有的框架,具有增强应用性能或特性的高级能力。虽然这两种框架都提供了受支持的扩展库,但是Laravel在此方面略显优势。目前,Yii有大约2,800个扩展。而Laravel已经能够支持大约9,000个扩展了。

    得分:Laravel得5分:Yii得2分

    7.迁移

    您可能需要将应用迁移到新的数据库结构中,而不想丢失旧的结构中的数据。那么,这往往离不开便利的数据库迁移框架。由于Laravel提供了seeder来协助简化该过程,因此其迁移操作相对比较容易。而Yii也提供了一个完整的迁移工具,来支持有效的迁移过程。

    得分:Laravel得3分:Yii得6分

    8.测试

    众所周知,在被用于Web应用的开发时,框架应当具有良好的测试能力,以检测和调试各项操作中的错误。同样,这两个框架在测试方面也是各有千秋。Yii提供了开箱即用的PHPUnit和Codeception,而Laravel提供了PHPUnit、以及诸如Httpkernel、DomCrawler、Browserkit等各种Symfony测试组件。

    得分:Laravel得4分:Yii得7分

    9.安全

    如今,安全性对于应用程序来说已是至关重要的了,毕竟任何攻击或漏洞都可能造成严重的破坏,进而泄露有价值的客户信息。因此,您需要通过框架,来保护用户数据的同时,为各种用户角色提供和管理适当的访问级别。Yii和Laravel都提供了诸如:密码保护、身份验证、防止SQL注入、预防跨站点脚本(XSS)攻击、以及其他安全威胁机制。不过,由于Yii提供了功能丰富且基于角色的访问控制系统,而Laravel则需要第三方的扩展,因此Yii又更胜一筹。当然,我们在此并没有贬低Laravel的安全性价值的意思。

    得分:Laravel得4分:Yii得8分

    10.可用的文档

    Laravel虽然提供了大量条理性强且具有技术含量的文档,然而由于信息量过大,开发人员很难快速地找到所要的信息。相比之下,Yii虽然没有强大的文档,但是在提供信息的方式上,并不存在陡峭的学习曲线。用户可以按照其文档指引,轻松地开始编程工作。当然,不可否认的是,就文档的丰富程度而言,Laravel要比Yii强大得多。

    得分:Laravel得8分:Yii得5分

    三、对比结果

    从综合评分来看,Laravel和Yii可谓势均力敌、不分伯仲。毕竟每一种框架都有着适合自己的用例场景和具体领域。总的说来,Laravel是一个广受专注的框架,其主要用户群体是各类Web开发人员。当然,Yii也拥有不小的用户群,它主要适合那些初学者级别的Web开发人员、系统管理员、以及其他开发爱好者。

    就实际项目而言,如果您正在尝试着构建大型的Web应用或企业级应用的话,Laravel将是您的最佳选择。而如果您正在寻找一个简单的开发框架,且目标是开发一个中小型应用的话,那么Yii会更加适合您。


    推荐阅读
    • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
    • [译]技术公司十年经验的职场生涯回顾
      本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
    • Redis底层数据结构之压缩列表的介绍及实现原理
      本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
    • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
    • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
    • 依赖注入_php 依赖注入容器
      篇首语:本文由编程笔记#小编为大家整理,主要介绍了php依赖注入容器相关的知识,希望对你有一定的参考价值。原文: http://blog.csdn.net/r ... [详细]
    • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
    • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
      本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
    • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
      本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
    • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
    • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
    • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
      本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
    • 如何查询zone下的表的信息
      本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
    • 本文介绍了在Python中使用zlib模块进行字符串的压缩与解压缩的方法,并探讨了其在内存优化方面的应用。通过压缩存储URL等长字符串,可以大大降低内存消耗,虽然处理时间会增加,但是整体效果显著。同时,给出了参考链接,供进一步学习和应用。 ... [详细]
    • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
    author-avatar
    不奸不散遇
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有