应用Yii1.1和PHP5进行敏捷Web开发(一){转}

2024-01-07 09:20

本文主要是介绍应用Yii1.1和PHP5进行敏捷Web开发(一){转},希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第一章  认识Yii

在过去数年,框架迅速发展,几乎在Web应用开发中,每个人都会涉及到一个新生框架,Web开发框架会帮助你加快你的应用程序发布,你只需迅速的把你的想 法在框架的白板上书写功能代码。随着Web应用的实现具有共同特征,现有的框架方案已经满足这些要求,在今天还有什么理由要从头开始你的下一个Web应用 呢?今天的Web开发,除程序自身语言外,一个现代化、灵活的和可扩展的框架,几乎是一个至关重要的编程工具,此外,如果语言与框架两个部份有特别的互补 性,结果是将一个非常强大的工具包:Java和Spring, Ruby和Rails, C#和.NET, PHP和Yii。

Yii是创始人薛强的心血结晶,于2008年1月1日开始开发。在此这前,薛强开发和维护PRADO框架多年。这些年的经验和从PRADO项目得到的用户 的反馈了解到,用户需要一个更容易、可扩展、更快速的基于PHP5的框架,以满足应用程序开发人员不继增长的需求。Yii正式发布于2008年10月,最 初是alpha版本,其与其他基于PHP的框架表现相比令人印象深刻,立即引起非常积极的关注。在2008年12月3日Yii1.0正式发布,
并于2010年3月14日,发布最新版本1.1.2。它有一个不断增长的开发团队,并继续在每天PHP开发人员中得到收益。我们认为,在这本书中包含信息会对你有些帮助,你很快就会明白为什么。

Yii的名称(是一个缩写,发音为 Yee 或 [ji:])代表容易(easy),高效(effcient)和可扩展(extensible)。Yii是用PHP5写的一个高性能,基础于组件的Web 开发应用框架。Yii可以更容易的创建和维护大规模的网络应用程序。这也将使应用程序更有效和可扩展。让我们快速了解一下这些特。

Yii很容易

要运行基于Yii的Web应用,你需要它的核心框架和一台支持PHP5.1.0以上的Web服务器,如果使用Yii开发,你需要精通PHP与面向对象编程 (OOP)。你不需要学习什么新的配置和模板语言,建立Yii应用,主要包括编写和维护自己定义的PHP类,其中一些将是继承Yii核心框架组件类。 Yii集成了许多来自其他著名的Web程序框架和应用程序中的伟大的想法,这些你可能会很熟悉并易于操作。Yii还包含了一个易用的配置约定。这意味 着,Yii已经为几乎所有的应用程序编写了合理的默认值,如果你按照约定的规定,你会写更少的代码,花更少的时间来开发应用程序。如果需要Yii允许你在 这些约定基础之上进行定制,本章后面及整书,我们将覆盖到这些默认的约定。

Yii很高效

Yii是为开发任何规模的Web应用提供的一个高性能的基于组件的Web框架,它鼓励在Web程序中最大化的代码重用,并可加快开发速度。如前所述,如果 你坚持使用Yii的内置约定,你可以让您的应用运行中,几乎不许要任何配置手册。Yii的另一个目的是帮助你使用DRY开发,DRY(Don’t Repeat Yourself)是一种灵活的应用开发。所有Yii应用是使用模型-视图-控制器(MVC)架构,Yii强制这种开发模式,通过提供一个放置你的MVC 代码的位置,这最大限度地减少重复,并有助于代码重用性和可维护性。你编写越少的代码,则需要的时间就越少,应用程序将赢得市场。同样,越容易维护你的应 用程序,留在市场的时间就越长。当然,Yii不仅开发快,他的运行速度也是非常快的性能是经过优化的。Yii从一开始就已经做到了开发与性能优化,其结果 是,他是一个最快的PHP开发框架。Yii的开发团已经与其他PHP框架进行了对比与测试,Yii运行速度在他们之上。这意味着在Yii上编写应用程序增 加额外的开销是微不足道的。

Yii可扩展

Yii是经过精心设计的,让几乎所有的代码都可扩展和可定制,以满足不同任务需要。事实上,在开发Yii的应用时,很难用不到Yii扩展性,这是一个很主 要的行为,可扩展是框架的核心。如果你要将你的代码为作可重用的工具,提供给其他开发者使用,Yii提供了简单制做步骤和遵循准则,以帮助您建立这样的第 三方扩展。并允许你将他贡献到Yii扩展列表中。

Yii最引人注目的是什么。易用性、性能优越、可扩展。Yii的功能包会帮助你满足今天在Web应用程序上的那些更高要求。AJAX可用挂件,Web Service包,基于MVC结构的验证,DAO和Active Record数据库层,复杂的缓存,分级的角色访问控制,主题化,国际化(I18N),和本地化(L10N),这仅仅是Yii的冰山一角。现在从1.1版 本,核心框架中有一个官方扩展类库叫Zii。这些扩展是由框架的核心团队成员开发与维护。
社区用户也可以编写并贡献扩展,Yii的扩展每天都在增长,有关所有可用的用户贡献的扩展,详见http://www.yiiframework.com/extensions/

MVC架构

如前所述,Yii是一个MVC框架,它提供了一个明确的目录结构,模型,视图,控制器的代码分别放到自己的目录,在我们建立第一个Yii应用之前,我们需要定义一些关键语,并查看Yii的MVC架构是如果实现和执行的。

模型

通常在一个MVC架构中,模型是负责维护状态,因为,它应该封装业务规则,定义数据的状态.在Yii中,一个模型可以是CModel的一个实例或它的子 类。通常一个模型类包括数据的属性,可能还会有不同的标签(有些是为了显示给用户时更友好),并且可以设置一些规则进行验证。模型中的数据可能来自己数据 库的表或一个表单用户输入域。

Yii实现了两种模型:表单模型(CFormModel类)和Active Record模型(CActiveRecord类)。他们都继承自同一个基类CModel。CFormModel代表的数据模型是从HTML表单中收集的 输入,它封装了所有逻辑,如表单的验证和其他业务逻辑,这些是要应用到表单的域上。它能将这些数据存储在内存中,或者在一个Active Record的模型帮助下,存入数据库。

Active Record (AR)是一种设计模式,用面向对象的方式抽象的访问数据。在Yii中,每一个AR对象的实例可以是CActiveRecord类或它的子类,它包装了数 据库表或视图中的一行记录,并封装了所有逻辑和访问数据库的细节,如果有大部份的业务逻辑,则必须使用这种模型。数据库表中一行每列字段的值对应AR对象 的一个属性。关于AR的更多介绍,后面将详细说明。

视图
通常情况下,视图是在数据模型的基础上渲染用户界面,Yii中一个视图就是一个PHP文件,它包含有关用户界面相关的元素,经常使用HTML,但也可以使 用PHP语句。通常在视图中的PHP语句应该是非常简单的条件或循环语句,或者使用Yii的UI组件,比如HTML助手的方法或预先建立好的挂件。更复杂 的逻辑应该与视图分离放到适当的模型中(如数据直接处理),或控制器中。

控制器
控制器主要是处理一个路由的请求,也负责获得用户的输入,与模型的交互,并指定视图的显示与更新。Yii中一个控制器实例可能是CController类 或它的子类。当一个控制器运行时,它会执行一个请求的操作,然后与需要的模型交互,最后渲然到一个视图上。一个操作,最简单的型式就是一个控制器类方法, 方法的名字要以action开头。

把MVC连接一起:Yii路由请求
大多数的MVC实现中,Web请求生命周期通常如下步骤:
1.浏览器发送请求到服务器上的MVC应用。
2.调用一个控制器用来处理请求。
3.这个控制器与模型交互
4.这个控制器调用视图
5.视图渲染数据(通常是HTML)并返回给浏览器显示
Yii的MVC实现也不例外,在一个Yii应用程序中,从浏览器发送处理的请求,首先会传给一个路由。路由分析请求,并确定下一步的处理。在大多数情况下 路由会识别控制器中的特定操作方法。这个操作方法将关注传入的请求数据与模型交互和执行其他需要的业务逻辑,最终,这个操作方法将处理的响应数据发送给他 对应的视图类。视图将确认符合预期布局设计的数据,并返回到浏览器显示。

Blog执行例子
为了更好的理解,让我们看一个虚构的例子。假如我们用Yii建立了自己的一个博客网站,域名是yourblog.com。这个网站与典 型的博客网站类似。在首页显示最近发布的文章列表。点击每篇文章的标题,可以显示完整的文章。下面的图片,可以说明Yii是怎样点击标题,发送请求的。

Blog执行流程

这个图片是跟踪到用户的点击连接:

http://yourblog.com/post/show/id/99

首先,请求发送给路由。路由解析请求URL结构中的关键词决定发送到哪。默认情况下,Yii的URL结构如以下格式:

http://hostname/index.php?r=ControllerID/ActionID

URL中的变量r指的是路由,Yii分析路由这条路由,以确定适当的控制器和操作方法做进一步处理请求。现在,你可能已经注意到,前面提到的URL地址并不遵循这个默认格式。其实这是一个非常简单的事情,通过配置来使用更友好的格式:

http://hostname/ControllerID/ActionID

这个例子我们将继续使用这行简化的格式。该URL中ControllerID指的是控制器的名称。默认情况下第一部份加上单词Controller就是控 制器类的名称,例如:如果你的控制器类名是TestController则ControllerID应该是Test。同样ActionID指的是控制器中 定义的操作名称。如果要在控制器中定义操作,那么要将单词Action加上操作名称,例如:如果您的操作方法名为actionCreate(),那么 ActionID则是Create。

提示:如果ActionID省略,控制器将采用默认的操作方法,这个方法是actionIndex()。如果ControllerID也省略了,应用程序将使用默认控制器。Yii默认的控制器是SiteController

回到这个例子,路由将分析下面的URL,http://yourblog.com/post/show/id/99,并会取URL路径的第一部份作为 ControllerID,第二部份作为ActionID。这将转化为路由请求到PostController类中的actionShow()方法。 URL最后部份(id/99)是一个键/值的查询参数,将在处理过程中,提供给操作方法。在这个例子中,表示所选的博客文章ID为99。

actionShow()方法处理具体的博客文章请求。在这种情况下,它使用查询字符串变量id,来确定具体的要求,他将要求模型来查询id=99的博客文章。

AR模型类请求数据库返回数据给控制器,控制器进一步准备数据给视图,视图则渲染到一个需要的HTML中,并将响应返回给用户的浏览器。

MVC架构允许我们将模型,控制器与视图分离,这使得开发人员可以很容易改变应用程序,而不影响用户界面(UI),UI设计帅也可以自由作出不影响模型的 业务逻辑变化。这种分离也可以很容易提供多个相同的模型。例如,你可以在yourblog.com的HTML页面或一个Flash/Flex RIA演示或移动应用程序或Web Service使用相同的模型代码,使用MVC约定的分离功能,将使应用程序更容易扩展和维护。

Yii已经帮你做了很多,并不是简单的分离代码,包括一些命令的约定和建议代码应该放置在同一类目录中。它已经帮助你写好了需要将这些部份关联在一起的代码。这使你可以享受严格的MVC设计带来的好处,而不必花费时间编写自己所需细节代码。让我们看看它都写了些什么。

对象关系映射和Active Reocrd
在多数情况下,我们建立的Web应用程序内部会与数据库关联。如前面的博客发布程序,该程序中博客的文章内容存在数据库的表中。然而,Web应用程序需要 的数据,与数据库映射到内存中类定义的属性是对应的。对象关系映射(ORM)库提供的,就是映射数据库表为一个对象的类。

ORM的大部份代码是如何实现数据库表中的字段与对象之间的关系,这是非常繁琐和重复的工作。幸运的是,Yii帮助你们完成了这些繁琐而又乏味的工作,它提供给我们一个ORM层,这就是AR模式。

Active Record
正如前面提到的,AR是一种设计模型,用面向对象的方式抽象的访问数据。它将表映射到类。行映射到对象,列则映射到对象的数据。换句话说,每一个 Active Reocrd类的实列代表了数据库表中的一行。然后,一个AR类不仅仅是数据库表中字段与类中属性的映射关系,他还需要在这些数据上处理一些业务逻辑。最 终这个类定义了所有关如有关对数据库的读写操作。依告约定和合理的默认值,Yii的AR对象将减少开发的时间,不必花费时间在繁琐和重复创建、读取、更新 和删除数据的SQL语句上。它也许开始人员使用面向对象的方式访问更多的数据库数据。为了说明这一点,在博客系统中的示例代码是用AR操作对应的数据库表 中的id,id是表的主键,id等于99。首先它会检查主键,然后修改标题并将修改结果保存到数据库:

 
1 $post = Post :: model() -> findByPk( 99 );
2 $post -> title = ' Some new title ' ;
3 $post -> save();

Active Record完成了我们以前需要编的任何SQL或其他要处理数据库的事情。

提示:Active Reocrd不只做了这些。它还无缝的集成了许多Yii框架的其他方面。有许多表单输入域的HTML助手捆绑在AR类的属性上。这样,Active Record提取表单输入值时直接进入模型。并且它支持自动化数据验证,如果验证失败,Yii视图类会显示验证错误给最终用户。我们将在本书提供的许多具 体例子再次介绍AR。

视图与控制器
视图和控制器是非常紧密的兄弟。控制器会生成需要显示的可用数据给视图,视图生成页面,并触发事件,发送数据给控制器。

在Yii中,一个视图文件是由所属的控制器类确定是否渲染它。这样,在视图脚本里,我们可以通过简单的方法$this引用到控制器实例。这样的实现,使视图和控制器更加紧密。幸运的是,Yii已经完成了所有的细节,因此,我们可以将精力集中具体应用程序的编码上。

Yii的控制器不仅仅是调用模型和渲染视图。控制器能管理请求前或请求后的操作要求,实现基本的访问控制规则来限制某些操作,管理应用程序范围内的布局和嵌套布司,管理数据的分页和许多幕后的服务。同样,我们要感谢Yii不需要让我们插手这些凌乱工作的细节。

Yii还有很多内容,要探索它的奥秘,最好的方法是使用它。现在我们已了解一些基础概念和术语,这里是我们的第一个里程碑。在下一章,我们将通过简单的了解Yii的安装过程和建立一个可运行的应用程序,以更好地说明。

小结
在这一章中,我们介绍了一个高级的Web应用框架Yii。我们还了解一Yii的设计理念。初步讨论这些抽象的内容,你是否失去了一点点信心呢?不要担心,这些例子都是有意义的,但,还是要回顾一下这章具体包括的内容:
1.应用程序开发框架的重要性。
2.Yii如此强大,它的特点是什么?
3.Yii是如何构建MVC架构的
4.Yii的一个典型的Web请求周期和URL的结构
5.Yii中的对象关系映射和Active Record

转载于:https://www.cnblogs.com/chalgcn/articles/1953883.html

这篇关于应用Yii1.1和PHP5进行敏捷Web开发(一){转}的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/579459

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

zoj3820(树的直径的应用)

题意:在一颗树上找两个点,使得所有点到选择与其更近的一个点的距离的最大值最小。 思路:如果是选择一个点的话,那么点就是直径的中点。现在考虑两个点的情况,先求树的直径,再把直径最中间的边去掉,再求剩下的两个子树中直径的中点。 代码如下: #include <stdio.h>#include <string.h>#include <algorithm>#include <map>#