导读¶
《深入理解Yii2.0》是一本干货。主要讲解Yii2.0及所代表的最新一代Web开发框架的新特性、新技术、新理念、新模式。 采用的方式是分析框架的源代码,尝试从根上进行理解和阐述,并融入个人使用Yii开发的一些经验和教训。 通过本书,你将不仅仅了解到Yii怎么使用的实操技巧,还将掌握其实现的技术原理和内幕。 更为重要的是,接触当前Web开发中最为流行又相对成熟的设计模式和开发思路。 衷心希望读者朋友们通过本书能有所收获。
本书将随着Yii官方对Yii2的开发而不断更新、丰富内容, 读者朋友们可以订阅 《深入理解Yii2.0》的RSS Feed , 第一时间了解本书的最近更新。 同时,建议收藏 《深入理解Yii2.0》网站 ,以便今后访问。
由于本人的水平有限,技术欠精,写的内容难免有纰漏,事实上已经有许多 热心读者 指出了书中的错误,我们都及时进行更正。 一如既往地欢迎和感谢读者朋友们通过每个页面底部的评论区, 把阅读过程中的疑问、需求、批评、建议与我们进行分享, 帮助我们创作更好的内容。
Yii是什么¶
Yii是一个PHP框架,用于开发各种类型的Web应用。Yii官方将其定义为高性能、基于组件的框架。
就个人的经验而言,总结Yii具有以下特点:
- Yii比较“潮”。
- Yii开发团队一直关注业内Web开发的最新技术,很注意吸收当下最为流行的技术。 可以说,近年来Web开发中最潮的技术都可以在Yii身上或多或少的看到影子。 比如,刚刚开始的时候Yii带有明显的Ruby on Rails风格; 比如Yii2中刚刚实现的命名空间等PHP最新特性支持等。 一个跟得上潮流和趋势的框架,才具有吸引力和生命力,学习起来才有意思、有意义。
- Yii比较“易”。
- 正如其名字的发音,Yii是一个比较易学、易用的框架。代码质量很高,有许多可以学习的地方。 注释清晰、文档丰富阅读代码难度不高。社区活跃,官方论坛有中文区,国内论坛人气也还OK,知识获取容易。 架构相对稳定,从Yii1.1到Yii2的变化看,许多原来的约定和沉淀的经验都还适用。
- Yii比较“全”。
- 就Web开发而言,无论是哪种类型的应用、无论是哪个开发阶段的常见问题,Yii都有成熟、高效、可靠的解决方案。 对于典型的Web开发而言,这已经是足够了。比如,伪静态化、国际化、RESTful等,Yii都有提供编程的框架。 但是,从规模上来讲,Yii还算不上一个大型框架。 个人对其的评价是一个中型偏轻点的框架,对于绝大多数的应用开发而言,肯定是充分、够用的了。
- Yii比较“快”。
- Yii官方把运行效率作为一个重要的特点来宣传。从实际使用看,在诸多PHP框架中,确实效率上具有一定优势。 但个人认为这点其实不是最重要的特点。对于框架的使用者,也就是开发人员来讲,更重要的是开发效率。 由于Yii架构合理,Web开发中常用的思路和模式都可以很顺地套上使用。 在Web开发中经常遇到的一些细节上的问题,Yii也提供了许多现成解决方案,拿来就可以使用,非常高效、方便。 开发效率高,对于开发者、开发团队而言,更为重要。
要感谢Yii开发团队精益求精的不懈努力,为广大Web开发者创造了如此优秀的框架。 本人自Yii1.1起就开始接触并使用Yii了,由于工作和爱好关系,也接触过一些框架了。总的说,至今对Yii很满意, 最最心仪的是两点:学了Yii,就学到了许多当下最流行、最成熟的东西;开发起快,改进来快。
Yii2.0的亮点¶
Yii有两个最主要的版本:Yii1.1和Yii2.0。Yii1.1是老的版本,在写这本书时,最新版本号是1.1.15。 Yii1.1现在已经不再进行新的开发了,官方只是进行维护,更新安全漏洞等,不会再有新的功能特性的引入。 而Yii2.0是在Yii1.1的基础上完全推倒重新写的一个框架,吸收了许多当前最新的技术和开发中的主流约定, 是最新一代Web开发框架的代表。 附录1:Yii2.0 对比 Yii1.1 的重大改进 部分介绍了Yii2.0对比Yii1.1的重大改进。 下面我们简单介绍Yii2.0的一些比较突出的特点:
- 运用了PHP命名空间、Trait、 PSR标准 、Composer和Bower包管理器, 等新技术新标准。
- 实现了 依赖注入和依赖注入容器 以及 服务定位器(Service Locator) 等新架构新模式。
- Yii2.0格外重视安全性,采取一系列手段有效防止SQL注入、XSS攻击、CSRF攻击、cookie篡改等。
- 广泛支持各类SQL和NOSQL数据库,高效实现了Active Record等数据库查询、操作界面,提供数据库迁移、复制、 读写分离等功能。
- 只需极少量的代码就可以实现完全符合标准的RESTful API。
- 支持各种粒度、介质的缓存机制。
- 提供多种认证和授权手段基于cookie和基于令牌的认证,RBAC等权限控制手段,支持OpenID,OAuth1,OAuth2等。
- 支持Bootstrap,jQuery UI,提供了丰富的Widget挂件供使用。
- 完善的国际化支持,提供符合 ICU标准 的时间、复数等格式化工具和消息翻译、视图翻译等功能。
- 除了支持Twig和Smarty 2个主流的PHP模版引擎外,开发者还可以自己写扩展支持其他引擎。
- 为苦命码农提供了 Yii调试工具条 和 Gii代码生成器 以及 文档生成器 等高效开发工具。
- 集成了 Codeception 和 Faker,并与DB Migration相结合,提供了一个fixture框架,方便测试开发。
- 提供了一个简单应用模板和高级应用模板,适用于不同的开发场景,都可以帮助开发者尽快搭建起自己的应用。
详细的Yii2.0功能特性,请查看 官方说明 。
背景知识¶
请留意,虽然本书以Yii2为主要内容,但并不要求读者具有Yii1.1的开发经验。 虽然具有这些背景知识可以更快的掌握Yii2,但在讲解过程中,本书会帮助没有Yii1.1相关知识的读者补充有关的概念。 只要有了这些概念,读者并不需要从头学习Yii1.1,就可以直接上手Yii2了。
当然,Yii作为一个PHP框架,读者朋友最好能够了解一下PHP,并不需要多精通,只需要看得懂代码,会写简单的代码, 编程的时候大概知道要使用哪些函数,就基本足够了,边用边学,也是一种学习方法。
同时,Yii还是一个面向对象的框架。这意味着在代码组织和问题解决的思路上,Yii都体现了面向对象的思想。 要用Yii来开发,最好也要遵循这一思想。因此,读者最好对面向对象编程有一定的了解。 其实,看一个程序员水平的高低,不单是对于某种语言、某种开发框架的熟练程度。 更重要的,是看其解决问题的思路和方法。其中一大类方法就是面向对象方法。 从这点来看,虽然学习和使用Yii并不需要多高深的面向对象的方法。 但作为过来人,还是希望各位读者朋友可以系统地、全面地学习面向对象的开发方法。 特别是Web开发中常用的设计模式,本书也会在涉及到时,进行专门讲解。
如何阅读本书¶
这不是一本“快速入门”、“一周精通”的书,本书的一个非常重要的目的和出发点是剖析Yii2.0的原理,使读者既知其然, 又知其所以然,这就注定了不可能一蹴而就。书中有大量的代码,需要剖析数据结构、追溯调用堆栈、跟踪代码流程。 虽然我们力求生动、简洁,但读者朋友们还是要有“古佛青灯”的心理准备,不浮、不躁,潜心练好内功,扎实锤炼底子, 早日练成绝活。
在内容上,本书直指Yii2.0的本质,求精不求全,对于相关的PHP、HTTP等诸多知识最多在讲到时点一点,浅偿辄止, 没能够展开介绍。因此,对于涉及到的关联知识、背景知识,要充分利用搜索引擎等工具,进行自学和补充。
在篇章结构上,本书总体上按照逐步深入的格局安排内容。同时,各部分的内容又保持相对独立, 尽量做到每个单独页面的内容,都可独立成篇。 因此,初次接触Yii2.0的读者朋友,建议循序渐进,依次阅读。 而具有一定基础的读者则可以根据个人兴趣爱好,自由选择学习切入点,在遇到有疑问的知识点时, 再按图索骥查找相关的页面。
在 Yii 基础 部分,依次介绍了 属性(Property) ,事件(Event) ,行为(Behavior) 等Yii中最基础的知识, 是理解整个Yii框架的最基本的概念。
在 Yii 约定 部分,主要讲解了Yii约定俗成的一些套路、设定,解决的是在开发者未作任何指定的情况下, Yii的默认行为方式的问题,用于加深对Yii实际使用的理解。这一部分主要包括 Yii应用的目录结构和入口脚本 , 别名(Alias) , Yii的类自动加载机制 , 环境和配置文件 , 配置项(Configuration) 等内容。
在 Yii 模式 部分,剖析了Yii是如何实现一些当前Web开发中最主流和成熟的设计模式。 学习这些设计模式,有助于深入理解Yii的机制,更难得的是提高读者朋友自身的开发设计水平。 这一部分主要讲了 MVC , 依赖注入和依赖注入容器 , 服务定位器(Service Locator) 三种设计模式。
后续我们还将创作更多的内容,敬请期待。