yii framwork

46
yii framwork Yii is a high-performance PHP framework best for developing Web 2.0 applications. 畅畅畅畅畅畅畅畅畅畅畅畅畅 畅畅 2012 畅 8 畅 23 畅

Upload: aria

Post on 23-Feb-2016

102 views

Category:

Documents


0 download

DESCRIPTION

yii framwork. Yii is a high-performance PHP framework best for developing Web 2.0 applications. 畅 捷通信息技术股份有限公司 张亮 2012 年 8 月 23 日. 目录. 环境需求 模型 - 视图 - 控制器 数据库操作 其它实践. 一、环境需求. 要运行一个 Yii 驱动的 Web 应用,你需要有一个支持 PHP 5.1.0 或以上版本的 Web 服 务器。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: yii framwork

yii framworkYii is a high-performance PHP framework best for developing Web 2.0 applications.

畅捷通信息技术股份有限公司张亮 2012 年 8 月 23 日

Page 2: yii framwork

www.chanjet.com

目录环境需求模型 - 视图 - 控制器数据库操作其它实践

Page 3: yii framwork

www.chanjet.com

一、环境需求要运行一个 Yii 驱动的 Web 应用,你需要有一个支持 PHP 5.1.0 或以上版本的 Web 服 务器。对于打算使用 Yii 的开发者来说,懂得面向对象编程( OOP )会非常有帮助。因为 Yii 是一 个纯 OOP 的框架。

Page 4: yii framwork

www.chanjet.com

二、模型 - 视图 - 控制器 (MVC)

Page 5: yii framwork

www.chanjet.com

2.1 Controller

控制器 是 CController 或其子类的实例。它在当用户请求时由应用创建。 当一个控制器运行时,它执行所请求的动作,动作通常会引入所必要的模型并渲染相应的视图。动作 的最简形式,就是一个名字以 action 开头的控制器类方法。

Page 6: yii framwork

www.chanjet.com

2.1 Controller

路由控制器实例化动作过滤器

Page 7: yii framwork

www.chanjet.com

2.1.1 路由原始路径

http://hostname/index.php ? r=[modules/][path/]controller[/action]

Path 模式下路径http://hostname/[modules/][path/]controller[/action]

其它情况使用 UrlManager ,你可以任意去控制他的路径

Page 8: yii framwork

www.chanjet.com

*2.1.2 控制器实例化控制器实例在 CWebApplication 处理到来的请求时创建。

Page 9: yii framwork

www.chanjet.com

2.1.3 动作如何实现一个动作

Controller 中以 action 开头的方法实现一个 CAction 的子类 , 在 Controller 中的 actions 方法路由,或者直接根据路径访问

支持参数的绑定控制器动作可以定义命名的参数,参数的值将由 Yii 自动从 $_GET 填充

Page 10: yii framwork

www.chanjet.com

2.1.4 过滤器过滤器是一段代码,可被配置在控制器动作执行之前或之后执行。过滤器可以是个 Controller 中的方法以 filter 开头,也可以是一个 Cfilter 的子类通过重写 filters 方法进行配置

Page 11: yii framwork

www.chanjet.com

2.1.4 过滤器

Page 12: yii framwork

www.chanjet.com

2.2 模型模型是 CModel 或其子类的实例。模型用于保持数据以及与其相关的业务逻辑。

Page 13: yii framwork

www.chanjet.com

2.3 视图布局小物件系统视图

Page 14: yii framwork

www.chanjet.com

2.3.1 布局布局是一种用来修饰视图的特殊的视图文件 . 它通常包含了用户界面中通用的一部分视图 . 例如 : 布局可以包含header 和 footer 的部分 , 然后把内容嵌入其间 .可以嵌套

Page 15: yii framwork

www.chanjet.com

*2.3.2 小物件小物件是 CWidget 或其子类的实例 . 它是一个主要用于表现数据的组件 . 小物件通常内嵌于一个视图来产生一些复杂而独立的用户界面 . 例如 , 一个日历小物件可用于渲染一个复杂的日历界面 . 小物件使用户界面更加可复用 .

Page 16: yii framwork

www.chanjet.com

*2.3.3 系统视图系统视图的渲染通常用于展示 Yii 的错误和日志信息 .例如 , 当用户请求来自一个不存在的控制器或动作时 ,Yii 会抛出一个异常来解释这个错误 . 这时 ,Yii 就会使用一个特殊的系统视图来显示此错误 .

Page 17: yii framwork

www.chanjet.com

2.4 模块模块是一个独立的软件单元,它包含 模型, 视图, 控制器 和其他支持的组件。 在许多方面上,模块看起来像一个 应用。主要的区别就是模块不能单独部署,它必须存在于一个应用里。 用户可以像他们访问普通应用的控制器那样访问模块中的控制器。模块可以嵌套

Page 18: yii framwork

www.chanjet.com

2.5 路径别名与名字空间 Yii 中广泛的使用了路径别名。路径别名关联于一个目录或文件的路径。它以点号语法指定,类似于广泛使用的名字空间( namespace )格式:

Page 19: yii framwork

www.chanjet.com

2.5.1 Root Alias

system: 表示 Yii 框架目录;zii: 表示 Zii 库 目录;application: 表示应用的 基础目录;webroot: 表示 入口脚本 文件所在的目录。此别名从版本 1.0.3 开始有效。ext: 表示包含了所有第三方 扩展 的目录。此别名从版本 1.0.8 开始有效。

Page 20: yii framwork

www.chanjet.com

2.5.2 Importing Classes

Yii::import('system.web.CController');Yii::import('system.web.*');

Page 21: yii framwork

www.chanjet.com

*2.5.3 使用命名空间的类application.components.GoogleMapPHP 5.3.0 以上有效

Page 22: yii framwork

www.chanjet.com

三、数据库操作Yii提供了强大的数据库编程支持。 Yii 数据访问对象(DAO) 建立在 PHP 的数据对象 (PDO)extension 上,使得在一个单一的统一的接口可以访问不同的数据库管理系统 (DBMS) 。使用 Yii 的 DAO 开发的应用程序可以很容易地切换使用不同的数据库管理系统,而不需要修改数据访问代码。 Yii 的 Active Record ( AR ),实现了被广泛采用的对象关系映射 (ORM)办法,进一步简化数据库编程。按照约定,一个类代表一个表,一个实例代表一行数据。

Page 23: yii framwork

www.chanjet.com

3.1 访问数据Yii DAO 基于 PHP Data Objects (PDO) 构建。它是一个为众多流行的 DBMS提供统一数据访问的扩展,这些 DBMS 包括 MySQL , PostgreSQL 等等。因此,要使用 Yii DAO , PDO 扩展和特定的 PDO 数据库驱动 ( 例如 PDO_MYSQL) 必须安装。

Page 24: yii framwork

www.chanjet.com

3.1.1 配置数据库Yii::app()->db

Page 25: yii framwork

www.chanjet.com

3.1.2 执行 SQL 语句

Page 26: yii framwork

www.chanjet.com

3.1.3 获取查询结果

Page 27: yii framwork

www.chanjet.com

3.1.4 使用事务

Page 28: yii framwork

www.chanjet.com

3.1.5 参数绑定

Page 29: yii framwork

www.chanjet.com

3.2 Active Record

Active Record (AR) 是一个流行的 对象 - 关系映射 (ORM) 技术。 每个 AR 类代表一个数据表(或视图),数据表(或视图)的列在 AR 类中体现为类的属性,一个 AR 实例则表示表中的一行。 常见的 CRUD 操作作为 AR 的方法实现。因此,我们可以以一种更加面向对象的方式访问数据。 例如,我们可以使用以下代码向 tbl_post 表中插入一个新行。

Page 30: yii framwork

www.chanjet.com

3.2.1 定义 AR 类此处省略一万字

Page 31: yii framwork

www.chanjet.com

3.2.1 通过 Gii 生成 AR

Page 32: yii framwork

www.chanjet.com

3.2.2 AR 的使用

Page 33: yii framwork

www.chanjet.com

3.2.2 AR 的使用

Page 34: yii framwork

www.chanjet.com

3.3 AR 的关系

Page 35: yii framwork

www.chanjet.com

3.3.1 四种关系BELONGS_TO (属于) : 如果表 A 和 B 之间的关系是一对多,则 表 B 属于 表 A ( 例如 Post 属于 User);HAS_MANY (有多个) : 如果表 A 和 B 之间的关系是一对多,则 A 有多个 B ( 例如 User 有多个 Post);HAS_ONE (有一个) : 这是 HAS_MANY 的一个特例, A 最多有一个 B ( 例如 User 最多有一个 Profile);MANY_MANY: 这个对应于数据库中的 多对多 关系。 由于多数 DBMS 不直接支持 多对多 关系,因此需要有一个关联表将 多对多 关系分割为 一对多 关系。 在我们的示例数据结构中, tbl_post_category 就是用于此目的的。在 AR 术语中,我们可以解释 MANY_MANY 为 BELONGS_TO 和 HAS_MANY 的组合。 例如, Post 属于多个( belongs to many ) Category , Category 有多个( has many ) Post.

Page 36: yii framwork

www.chanjet.com

3.3.2 关系的配置配置在 AR 的 Relations 方法里面,它以数组的形式从方法中返回'VarName'=>array('RelationType', 'ClassName', 'ForeignKey', ...additional options)

Page 37: yii framwork

www.chanjet.com

3.3.3 关联查询 AR默认情况下延迟加载可以通过 with 方法要求 AR 直接加载

渴求式加载

Page 38: yii framwork

www.chanjet.com

3.3.4 relations 里可以配置更多select: 关联的 AR 类中要选择 (select) 的列的列表。 默认为 '*' ,即选择所有列。此选项中的列名应该是已经消除歧义的。condition: 即 WHERE 条件。默认为空。此选项中的列名应该是已经消除歧义的。params: 要绑定到所生成的 SQL 语句的参数。应该以 名 - 值 对数组的形式赋值。此选项从 1.0.3 版起有效。on: 即 ON 语句。此处指定的条件将会通过 AND 操作符附加到 join 条件中。此选项中的列名应该是已经消除歧义的。 此选项不会应用到 MANY_MANY 关系中。此选项从 1.0.2 版起有效。order: 即 ORDER BY 语句。默认为空。 此选项中的列名应该是已经消除歧义的。…

Page 39: yii framwork

www.chanjet.com

3.3.5 动态查询

Page 40: yii framwork

www.chanjet.com

3.3.6 查询域的使用

Page 41: yii framwork

www.chanjet.com

3.3.6 查询域的使用

Page 42: yii framwork

www.chanjet.com

四、其它实践Yii 提供了大量的插件供开发者使用,开发者可以根据需求在 yii 的官网上搜索适合自己的插件。http://www.yiiframework.com/extensions/

Page 43: yii framwork

www.chanjet.com

4.1 path 路径的使用

Page 44: yii framwork

www.chanjet.com

4.2 隐藏 index.php 路径开启 apache 的 mod_rewrite 模块 去掉 LoadModule rewrite_module modules/mod_rewrite.so 前的“#”符号 确保 <Directory "..."></Directory> 中有“ AllowOverride All”

Page 45: yii framwork

www.chanjet.com

4.3 restfullyii

这个第三方插件可以快速实现 rest 方式的 api 开发配合 eoauth 插件可以快速实现基于 oauth1.0 的rest 接口实现。

Page 46: yii framwork