460 likes | 656 Views
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 服 务器。
E N D
yiiframwork Yii is a high-performance PHP framework best for developing Web 2.0 applications. 畅捷通信息技术股份有限公司 张亮 2012年8月23日
目录 • 环境需求 • 模型-视图-控制器 • 数据库操作 • 其它实践
一、环境需求 • 要运行一个 Yii驱动的 Web 应用,你需要有一个支持 PHP 5.1.0 或以上版本的 Web 服 务器。 • 对于打算使用 Yii的开发者来说,懂得面向对象编程(OOP)会非常有帮助。因为 Yii是一 个纯 OOP 的框架。
2.1 Controller • 控制器 是 CController 或其子类的实例。它在当用户请求时由应用创建。 当一个控制器运行时,它执行所请求的动作,动作通常会引入所必要的模型并渲染相应的视图。动作 的最简形式,就是一个名字以 action 开头的控制器类方法。
2.1 Controller • 路由 • 控制器实例化 • 动作 • 过滤器
2.1.1 路由 • 原始路径 • http://hostname/index.php?r=[modules/][path/]controller[/action] • Path模式下路径 • http://hostname/[modules/][path/]controller[/action] • 其它情况 • 使用UrlManager,你可以任意去控制他的路径
*2.1.2 控制器实例化 • 控制器实例在 CWebApplication 处理到来的请求时创建。
2.1.3 动作 • 如何实现一个动作 • Controller中以action开头的方法 • 实现一个CAction的子类,在Controller中的actions方法路由,或者直接根据路径访问 • 支持参数的绑定 • 控制器动作可以定义命名的参数,参数的值将由 Yii自动从 $_GET 填充
2.1.4过滤器 • 过滤器是一段代码,可被配置在控制器动作执行之前或之后执行。 • 过滤器可以是个Controller中的方法以filter开头,也可以是一个Cfilter的子类 • 通过重写filters方法进行配置
2.2 模型 • 模型是 CModel 或其子类的实例。模型用于保持数据以及与其相关的业务逻辑。
2.3 视图 • 布局 • 小物件 • 系统视图
2.3.1 布局 • 布局是一种用来修饰视图的特殊的视图文件.它通常包含了用户界面中通用的一部分视图.例如:布局可以包含header和footer的部分,然后把内容嵌入其间. • 可以嵌套
*2.3.2 小物件 • 小物件是 CWidget 或其子类的实例.它是一个主要用于表现数据的组件.小物件通常内嵌于一个视图来产生一些复杂而独立的用户界面.例如,一个日历小物件可用于渲染一个复杂的日历界面.小物件使用户界面更加可复用.
*2.3.3系统视图 • 系统视图的渲染通常用于展示 Yii的错误和日志信息.例如,当用户请求来自一个不存在的控制器或动作时,Yii会抛出一个异常来解释这个错误. 这时,Yii就会使用一个特殊的系统视图来显示此错误.
2.4 模块 • 模块是一个独立的软件单元,它包含 模型, 视图, 控制器 和其他支持的组件。 在许多方面上,模块看起来像一个 应用。主要的区别就是模块不能单独部署,它必须存在于一个应用里。 用户可以像他们访问普通应用的控制器那样访问模块中的控制器。 • 模块可以嵌套
2.5 路径别名与名字空间 • Yii中广泛的使用了路径别名。路径别名关联于一个目录或文件的路径。它以点号语法指定,类似于广泛使用的名字空间(namespace)格式:
2.5.1 Root Alias • system: 表示 Yii框架目录; • zii: 表示 Zii库 目录; • application: 表示应用的 基础目录; • webroot: 表示 入口脚本 文件所在的目录。此别名从版本 1.0.3 开始有效。 • ext: 表示包含了所有第三方 扩展 的目录。此别名从版本 1.0.8 开始有效。
2.5.2 Importing Classes • Yii::import('system.web.CController'); • Yii::import('system.web.*');
*2.5.3 使用命名空间的类 • application.components.GoogleMap • PHP 5.3.0 以上有效
三、数据库操作 • Yii提供了强大的数据库编程支持。Yii数据访问对象(DAO)建立在PHP的数据对象(PDO)extension上,使得在一个单一的统一的接口可以访问不同的数据库管理系统(DBMS)。使用Yii的DAO开发的应用程序可以很容易地切换使用不同的数据库管理系统,而不需要修改数据访问代码。Yii的Active Record( AR ),实现了被广泛采用的对象关系映射(ORM)办法,进一步简化数据库编程。按照约定,一个类代表一个表,一个实例代表一行数据。
3.1 访问数据 • Yii DAO 基于 PHP Data Objects (PDO)构建。它是一个为众多流行的DBMS提供统一数据访问的扩展,这些 DBMS 包括 MySQL,PostgreSQL等等。因此,要使用 Yii DAO,PDO 扩展和特定的 PDO 数据库驱动(例如 PDO_MYSQL) 必须安装。
3.1.1 配置数据库 • Yii::app()->db
3.2 Active Record • Active Record (AR) 是一个流行的 对象-关系映射 (ORM) 技术。 每个 AR 类代表一个数据表(或视图),数据表(或视图)的列在 AR 类中体现为类的属性,一个 AR 实例则表示表中的一行。 常见的 CRUD 操作作为 AR 的方法实现。因此,我们可以以一种更加面向对象的方式访问数据。 例如,我们可以使用以下代码向 tbl_post表中插入一个新行。
3.2.1 定义AR类 • 此处省略一万字
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.
3.3.2 关系的配置 • 配置在AR的Relations方法里面,它以数组的形式从方法中返回 • 'VarName'=>array('RelationType', 'ClassName', 'ForeignKey', ...additional options)
3.3.3 关联查询 • AR默认情况下延迟加载 • 可以通过 with方法要求AR直接加载 • 渴求式加载
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 语句。默认为空。 此选项中的列名应该是已经消除歧义的。 • …
四、其它实践 • Yii提供了大量的插件供开发者使用,开发者可以根据需求在yii的官网上搜索适合自己的插件。 • http://www.yiiframework.com/extensions/
4.2 隐藏index.php路径 • 开启apache的mod_rewrite模块 去掉LoadModulerewrite_module modules/mod_rewrite.so前的“#”符号 确保<Directory "..."></Directory>中有“AllowOverride All”
4.3 restfullyii • 这个第三方插件可以快速实现rest方式的api开发 • 配合eoauth插件可以快速实现基于oauth1.0的rest接口实现。