YII框架学习及总结-0-基础概念

来源:互联网 发布:郑州大学网络服务中心 编辑:程序博客网 时间:2024/04/30 10:26

.YII框架简介

 

1.Yii是什么

 

Yii 是一个基于组件的高性能PHP框架,用于快速开发大型 Web应用。它使Web开发中的可复用度最大化,可以显著提高你的Web应用开发速度。Yii这个名字(读作易(Yee  [ji:])代表 简单(easy高效(efficient  可扩展(extensible.

 

2.创始人

 

创始人薛强,于200811日开始开发

 

3.环境需求

 

要运行一个 Yii驱动的 Web应用,你需要有一个支持 PHP 5.1.0或以上版本的 Web务器。

对于打算使用 Yii的开发者来说,懂得面向对象编程(OOP)会非常有帮助。因为 Yii是一个纯 OOP的框架。

 

4.Yii最适合用来做什么?

Yii 是一个通用的 Web编程框架,可以用于开发几乎所有的 Web应用。由于它是轻量级的且具备了成熟的缓存解决方案,它特别适用于开发高流量的应用,例如门户,论坛,内容管理系统(CMS),电子商务系统等等。

 

.MVC

 

1.MVC概念

 

MVC全名是ModelView Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑和数据显式分离的方法组织代码,将业务逻辑聚集到一个部件里面,在界面和用户围绕数据的交互能被改进和个性化定制的同时而不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

 

Model(模型)表示应用程序核心(比如数据库记录列表)。

View(视图)显示数据(数据库记录)。

Controller(控制器)处理输入(写入数据库记录)。

 

2.YIIMVC

 

Yii 使用了 Web开发中广泛采用的模型-视图-控制器(MVC)设计模式。 MVC的目标是将业务逻辑从用户界面的考虑中分离,这样开发者就可以更容易地改变每一部分而不会影响其他。 MVC中,模型代表信息(数据)和业务规则;视图包含了用户界面元素,例如文本,表单等;控制器则管理模型和视图中的通信。

除了 MVC, Yii还引入了一个前端控制器,叫做应用,它表示请求处理的执行上下文。应用处理用户的请求并将其分派到一个合适的控制器以继续处理。

下面的示意图展示了 Yii应用的静态结构:

 

Static structure of Yii application

Static structure of Yii application

 

一个典型的工作流

下图展示了一个 Yii应用在处理用户请求时典型的工作流。

 

A typical workflow of Yii application

A typical workflow of Yii application

1.用户发出了访问 URL:http://www.example.com/index.php?r=post/show&id=1  的请求, Web 2务器通过执行入口脚本 index.php 处理此请求。

 

 

2.入口脚本创建了一个应用实例并执行。

 

3.应用从一个叫做 request  应用组件 中获得了用户请求的详细信息。

 

4.应用在一个名叫 urlManager 的应用组件的帮助下,决定请求的 控制器  动作 。在这个例子中,控制器是 post,它代表 PostController 类;动作是 show ,其实际含义由控制器决定。

 

5.应用创建了一个所请求控制器的实例以进一步处理用户请求。控制器决定了动作 show 指向控制器类中的一个名为actionShow 的方法。然后它创建并持行了与动作关联的过滤器(例如访问控制,基准测试)。如果过滤器允许,动作将被执行。

 

6.动作从数据库中读取一个 ID 1  Post 模型。

 

7.动作通过 Post 模型渲染一个名为 show  视图。

 

8.视图读取并显示 Post 模型的属性。

 

9.视图执行一些 小物件。

 

10.视图的渲染结果被插入一个 布局。

 

11.动作完成视图渲染并将其呈现给用户。

 

.模块

 

注意版本 1.0.3起支持模块。

 

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

 

模块在一些场景里很有用。对大型应用来说,我们可能需要把它划分为几个模块,每个模块可以单独维护和部署。一些通用的功能,例如用户管理,评论管理,可以以模块的形式开发,这样他们就可以容易地在以后的项目中被复用。

创建模块

 

模块组织在一个目录中,目录的名字即模块的唯一 ID 模块目录的结构跟 应用基础目录 很相似。下面列出了一个 fourm 的模块的典型的目录结构:

forum/
   ForumModule.php           
模块类文件
   components/               
包含可复用的用户组件
      views/                 
包含小物件的视图文件
   controllers/              
包含控制器类文件
      DefaultController.php  
默认的控制器类文件
   extensions/               
包含第三方扩展
   models/                   
包含模块类文件
   views/                    
包含控制器视图和布局文件
      layouts/               
包含布局文件
      default/               
包含 DefaultController的视图文件
         index.php           
首页视图文件

模块必须有一个继承自 CWebModule 的模块类。类的名字通过表达式 ucfirst($id).'Module' 确定,其中的 $id 代表模块的 ID (或者说模块的目录名字)模块类是存储模块代码间可共享信息的中心位置。

 

例如,我们可以使用CWebModule::params 存储模块参数,使用 CWebModule::components 分享模块级的 应用组件 .

提示我们可以使用Gii中的模块创建器创建新模块的基本骨架。

使用模块

要使用模块,首先将模块目录放在 应用基础目录  modules 中。然后在应用的 modules 属性中声明模块 ID。例如,为了使用上面的 forum 模块,我们可以使用如下 应用配置:

returnarray(
    ......
   'modules'=>array('forum',...),
    ......
);

 

模块也可以在配置时带有初始属性值。做法和配置 应用组件 很类似。例如, forum 模块可以在其模块类中有一个名为postPerPage 的属性,它可以在 应用配置 中配置如下:

returnarray(
    ......
    'modules'=>array(
        'forum'=>array(
           'postPerPage'=>20,
        ),
    ),
    ......
);

 

模块的实例可通过当前活动控制器的 module 属性访问。在模块实例中,我们可以访问在模块级中共享的信息。例如,为访问上面的 postPerPage 信息,我们可使用如下表达式:

$postPerPage=Yii::app()->controller->module->postPerPage;
// or the following if $this refers to the controller instance
// $postPerPage=$this->module->postPerPage;

 

模块中的控制器动作可以通过 路由 moduleID/controllerID/actionID 访问。例如,假设上面的 forum 模块有一个名为 PostController 的控制器,我们就可以通过 路由 forum/post/create 访问此控制器中的 create 动作。此路由对应的 URL即: http://www.example.com/index.php?r=forum/post/create.

 

提示如果一个控制器位于 controllers 目录的子目录中,我们仍然可以使用上述 路由 格式。例如,假设PostController 位于 forum/controllers/admin 中,我们可以通过forum/admin/post/create 访问 create 动作。

 

嵌套的模块

模块可以无限级嵌套。这就是说,一个模块可以包含另一个模块,而这另一个模块又可以包含其他模块。我们称前者为 父模块,后者为 子模块.子模块必须定义在其父模块的 modules 属性中,就像我们前面在应用配置中定义模块一样。

要访问子模块中的控制器动作,我们应使用路由 parentModuleID/childModuleID/controllerID/actionID.

 

 

.开发规范

 

Yii 偏爱规范胜于配置。遵循规范可使你能够创建成熟的Yii应用而不需要编写、维护复杂的配置。当然了,在必要时,Yii 仍然可以在几乎所有的方面通过配置实现自定义。

 

下面我们讲解 Yii 编程中推荐的开发规范。 为简单起见,我们假设 WebRoot 是Yii 应用安装的目录。

 

URL

默认情况下,Yii 识别如下格式的 URL:

 

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

r GET 变量意为 路由(route) ,它可以被Yii解析为 控制器和动作。 如果ActionID 被省略,控制器将使用默认的动作(在CController::defaultAction中定义); 如果 ControllerID也被省略(或者 r 变量不存在),应用将使用默认的控制器 (在CWebApplication::defaultController中定义)。

 

通过 CUrlManager 的帮助,可以创建更加可识别,更加 SEO 友好的URL,例如http://hostname/ControllerID/ActionID.html。 此功能在 URL Management 中有详细讲解。

 

代码

Yii 推荐命名变量、函数和类时使用驼峰风格,即每个单词的首字母大写并连在一起,中间无空格。 变量名和函数名应该使它们的第一个单词全部小写,以使其区别于类名(例如:$basePath,runController(), LinkPager)。对私有类成员变量来说,我们推荐以下划线作为其名字前缀(例如: $_actionList)。

 

由于在 PHP 5.3.0之前不支持名字空间,我们推荐类要通过某种独立的方式命名,以避免和第三方类发生冲突。鉴于此, 所有的 Yii 框架类名以 "C" 作前缀。

 

一个针对控制器名字的特殊规则是它们必须以单词 Controller 结尾。那么控制器ID 即类名的首字母小写并去掉单词 Controller。 例如,PageController 类的 ID 就是 page。这个规则使应用更加安全。它还使控制器相关的URL更加简单(例如 /index.php?r=page/index 而不是/index.php?r=PageController/index)。

 

配置

配置是一个键值对数组。每个键代表了所配置的对象中的属性名,每个值则为相应属性的初始值。例如, array('name'=>'My application', 'basePath'=>'./protected') 初始化了 name和 basePath 属性为它们相应的数组值。

 

类中任何可写的属性都可以被配置。如果没有配置,属性将使用它们的默认值。当配置一个属性时,最好阅读相应文档以保证初始值正确。

 

文件

命名和使用文件的规范取决于它们的类型。

 

类文件应以它们包含的公有类命名。例如, CController 类位于CController.php 文件中。 公有类是可以被任何其他类使用的类。每个类文件应包含最多一个公有类。私有类(只能被一个公有类使用的类)可以放在使用此类的公有类所在的文件中。

 

视图文件应以视图的名字命名。例如, index 视图位于 index.php 文件中。视图文件是一个PHP脚本文件,它包含了用于呈现内容的 HTML和PHP代码。

 

配置文件可以任意命名。配置文件是一个PHP脚本,它的主要目的是返回一个体现配置的关联数组。

 

目录

Yii假定了一系列默认的目录用于不同的场合。如果需要,每个目录都可以自定义。

 

WebRoot/protected: 这是 应用基础目录,是放置所有安全敏感的PHP脚本和数据文件的地方。Yii 有一个默认的 application 别名指向此目录。此目录及目录中的文件应该保护起来防止Web用户访问。它可以通过 CWebApplication::basePath 自定义。

 

WebRoot/protected/runtime: 此目录放置应用在运行时产生的私有临时文件。 此目录必须对 Web 服务器进程可写。它可以通过 CApplication::runtimePath自定义。

 

WebRoot/protected/extensions: 此目录放置所有第三方扩展。它可以通过 CApplication::extensionPath 自定义。

 

WebRoot/protected/modules: 此目录放置所有的应用模块,每个模块使用一个子目录。

 

WebRoot/protected/controllers: 此目录放置所有控制器类文件。 它可以通过 CWebApplication::controllerPath 自定义。

 

WebRoot/protected/views: 此目录放置所有试图文件,包含控制器视图,布局视图和系统视图。 它可以通过 CWebApplication::viewPath 自定义。

 

WebRoot/protected/views/ControllerID: 此目录放置单个控制器类中使用的视图文件。 此处的 ControllerID 是指控制器的 ID 。它可以通过 CController::viewPath 自定义。

 

WebRoot/protected/views/layouts: 此目录放置所有布局视图文件。它可以通过 CWebApplication::layoutPath 自定义。

 

WebRoot/protected/views/system: 此目录放置所有系统视图文件。 系统视图文件是用于显示异常和错误的模板。它可以通过 CWebApplication::systemViewPath 自定义。

 

WebRoot/assets: 此目录放置公共资源文件。资源文件是可以被发布的,可由Web用户访问的私有文件。此目录必须对 Web 服务器进程可写。 它可以通过 CAssetManager::basePath自定义

 

WebRoot/themes: 此目录放置应用使用的不同的主题。每个子目录即一个主题,主题的名字即目录的名字。 它可以通过 CThemeManager::basePath 自定义。

 

数据库

 

多数Web 应用是由数据库驱动的。为了最佳时间,我们推荐在对表和列命名时使用如下命名规范。注意,这些规范并不是 Yii 所必须的。

 

数据库表名和列名都使用小写命名。

 

名字中的单词应使用下划线分割 (例如 product_order)。

 

对于表名,你既可以使用单数也可以使用复数。但 不要同时使用两者。为简单起见,我们推荐使用单数名字。

 

表名可以使用一个通用前缀,例如 tbl_。这样当应用所使用的表和另一个应用说使用的表共存于同一个数据库中时就特别有用。 这两个应用的表可以通过使用不同的表前缀很容易地区别开。

0 0
原创粉丝点击