yii快速入门与参考.docx
- 文档编号:28635854
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:71
- 大小:68.35KB
yii快速入门与参考.docx
《yii快速入门与参考.docx》由会员分享,可在线阅读,更多相关《yii快速入门与参考.docx(71页珍藏版)》请在冰豆网上搜索。
yii快速入门与参考
yii快速入门与参考(转载)
已有111次阅读2012-6-1010:
52|yii,快速,framework,应用程序,配置文件
Ⅰ、基本概念
一、入口文件
入口文件内容:
一般格式如下:
$yii=dirname(__FILE__).'/../../framework/yii.php';//Yii框架位置
$config=dirname(__FILE__).'/protected/config/main.php';//当前应用程序的主配置文件位置
//部署正式环境时,去掉下面这行
//defined('YII_DEBUG')ordefine('YII_DEBUG',true);//是否运行在调试模式下
require_once($yii);//包含Yii框架
Yii:
:
createWebApplication($config)->run();//根据主配置文件建立应用实例,并运行。
你可以在当前应用的任何位置通过Yii:
:
app()来访问这个实例。
二、主配置文件
保存位置:
你的应用/protected/config/main.php
文件内容:
一般格式如下:
returnarray(
'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',//当前应用根目录的绝对物理路径
'name'=>'YiiBlogDemo',//当前应用的名称
//预载入log(记录)应用组件,这表示该应用组件无论它们是否被访问都要被创建。
该应用的参数配置在下面以“components”为关键字的数组中设置。
'preload'=>array('log'),//log为组件ID
//自动载入的模型和组件类
'import'=>array(
'application.models.*',//载入“application/models/”文件夹下的所有模型类
'ponents.*',//载入“application/components/”文件夹下的所有应用组件类
),
'defaultController'=>'post',//设置默认控制器类
//当前应用的组件配置。
更多可供配置的组件详见下面的“核心应用组件”
'components'=>array(
'user'=>array(//user(用户)组件配置,“user”为组件ID
//可以使用基于cookie的认证
'allowAutoLogin'=>true,//允许自动登录
),
'cache'=>array(//缓存组件
'class'=>'CMemCache',//缓存组件类
'servers'=>array(//MemCache缓存服务器配置
array('host'=>'server1','port'=>11211,'weight'=>60),//缓存服务器1
array('host'=>'server2','port'=>11211,'weight'=>40),//缓存服务器2
),
),
'db'=>array(//db(数据库)组件配置,“db”为组件ID
'connectionString'=>'sqlite:
protected/data/blog.db',//连接数据库的DSN字符串
'tablePrefix'=>'tbl_',//数据表前缀
),
//如果要使用一个MySQL数据库,请取消下面的注释
/*
'db'=>array(
'connectionString'=>'mysql:
host=localhost;dbname=blog',//连接mysql数据库
'emulatePrepare'=>true,
'username'=>'root',//MySQL数据库用户名
'password'=>'',//MySQL数据库用户密码
'charset'=>'utf8',//MySQL数据库编码
'tablePrefix'=>'tbl_',//MySQL数据库表前缀
),
*/
'errorHandler'=>array(
//使用SiteController控制器类中的actionError方法显示错误
'errorAction'=>'site/error',//遇到错误时,运行的操作。
控制器名和方法名均小写,并用斜线“/”隔开
),
//URL路由管理器
'urlManager'=>array(
'urlFormat'=>'path',//URL格式。
共支持两种格式:
'path'格式(如:
/path/to/EntryScript.php/name1/value1/name2
/value2...)和'get'格式(如:
/path/to/EntryScript.php?
name1=value1&name2=value2...)。
当使用'path'格式时,
需要设置如下的规则:
'rules'=>array(//URL规则。
语法:
<参数名:
正则表达式>
'post//'=>'post/view',
//将post/12/helloword指向post/view?
id=12&title=helloword
'posts/'=>'post/index',//将posts/hahahaha指向post/index?
tag=hahahaha
'/'=>'/',
),
),
'log'=>array(//记录
'class'=>'CLogRouter',//处理记录信息的类
'routes'=>array(
array(
'class'=>'CFileLogRoute',//处理错误信息的类
'levels'=>'error,warning',//错误等级
),
//如要将错误记录消息在网页上显示,取消下面的注释即可
/*
array(
'class'=>'CWebLogRoute',
),
*/
),
),
),//应用组件配置结束
//使用Yii:
:
app()->params['参数名']可以访问应用层的参数
'params'=>require(dirname(__FILE__).'/params.php'),
);
核心应用组件:
Yii预定义了一系列核心应用组件,提供常见Web应用中所用的功能。
例如,request组件用于解析用户请求并提供例如URL,cookie等信息。
通过配置这些核心组件的属性,我们可以几乎任意的修改Yii的默认行为。
下面我们列出了由CWebApplication预定义的核心组件。
assetManager:
CAssetManager-管理私有资源文件的发布。
authManager:
CAuthManager-管理基于角色的访问控制(RBAC).
cache:
CCache-提供数据缓存功能。
注意,你必须指定实际的类(例如CMemCache,CDbCache)。
否则,当你访问此组件时将返回NULL。
clientScript:
CClientScript-管理客户端脚本(javascripts和CSS).
coreMessages:
CPhpMessageSource-提供Yii框架用到的核心信息的翻译。
db:
CDbConnection-提供数据库连接。
注意,使用此组件你必须配置其connectionString属性。
errorHandler:
CErrorHandler-处理未捕获的PHP错误和异常。
format:
CFormatter-格式化数值显示。
此功能从版本1.1.0起开始提供。
messages:
CPhpMessageSource-提供Yii应用中使用的信息翻译。
request:
CHttpRequest-提供关于用户请求的信息。
securityManager:
CSecurityManager-提供安全相关的服务,例如散列,加密。
session:
CHttpSession-提供session相关的功能。
statePersister:
CStatePersister-提供全局状态持久方法。
urlManager:
CUrlManager-提供URL解析和创建相关功能
user:
CWebUser-提供当前用户的识别信息。
themeManager:
CThemeManager-管理主题。
要访问一个应用组件,使用Yii:
:
app()->组件的ID
三、控制器(Controller)
控
制器是CController
类的子类的实例。
它在当用户请求时由应用创建。
当一个控制器运行时,它执行所请求的动作(控制器类方法),动作通常会引入所必要的模型并渲染相应的视图。
动作,就是一个名字以action开头的控制器类方法(action+大写首字母的动作名)。
控制器类文件保存位置protected/controllers/
控制器和动作以ID识别。
控制器ID是一种'父目录/子目录/控制器名'的格式,对应相应的控制器类文件protected/controllers/父目录/子目录/大写首字母的控制器名Controller.php;
动作ID是除去action前缀的动作方法名。
1、路由
用户以路由的形式请求特定的控制器和动作。
路由是由控制器ID和动作ID连接起来的,两者以斜线分割。
例如,路由post/edit代表PostController及其edit动作。
默认情况下,URLhttp:
//hostname/index.php?
r=post/edit即请求此控制器和动作。
注
意:
默认情况下,路由是大小写敏感的。
可以通过设置应用配置中的CUrlManager:
:
caseSensitive为false
使路由对大小写不敏感。
当在大小写不敏感模式中时,要确保你遵循了相应的规则约定,即:
包含控制器类文件的目录名小写,且控制器映射和
动作映射中使用的键为小写。
路由的格式:
控制器ID/动作ID或模块ID/控制器ID/动作ID(如果是嵌套模块,模块ID就是父模块ID/子模块ID)
2、控制器实例化
应用将使用如下规则确定控制器的类以及类文件的位置:
1、如果指定了CWebApplication:
:
catchAllRequest,控制器将基于此属性创建,而用户指定的控制器ID将被忽略。
这通常用于将应用设置为维护状态并显示一个静态提示页面。
2、如果在CWebApplication:
:
controllerMap中找到了ID,相应的控制器配置将被用于创建控制器实例。
3、
如果ID为'path/to/xyz'的格式,控制器类的名字将判断为XyzController,相应的类文件则为
protected/controllers/path/to/XyzController.php。
如果类文件不存在,将触发一个404
CHttpException异常。
在使用了模块的情况下,应用将检查此ID是否代表一个模块中的控制器。
如果是的话,模块实例将被首先创建,然后创建模块中的控制器实例。
3、动作(action)
动作就是被定义为一个以action单词作为前缀命名的方法。
而更高级的方式是定义一个动作类并让控制器在收到请求时将其实例化。
这使得动作可以被复用,提高了可复用度。
1、定义一个动作类,基本格式如下:
classUpdateActionextendsCAction
{
publicfunctionrun()
{
//placetheactionlogichere
}
}
2、使用动作类:
为了让控制器注意到这个动作,我们要用如下方式覆盖控制器类的actions()方法:
classPostControllerextendsCController
{
publicfunctionactions()
{
returnarray(
'edit'=>'application.controllers.post.UpdateAction',
//使用“应用程序文件夹/controllers/post/UpdateAction.php”文件中的类来处理edit动作
);
}
}
如上所示,我们使用了路径别名“application.controllers.post.UpdateAction”指定动作类文件为“protected/controllers/post/UpdateAction.php”。
通过编写基于类的动作,我们可以将应用组织为模块的风格。
例如,如下目录结构可用于组织控制器相关代码:
protected/
controllers/
PostController.php
UserController.php
post/
CreateAction.php
ReadAction.php
UpdateAction.php
user/
CreateAction.php
ListAction.php
ProfileAction.php
UpdateAction.php
4、过滤器(filter)
过滤器是一段代码,可被配置在控制器动作执行之前或之后执行。
一个动作可以有多个过滤器。
如有多个过滤器,则按照它们出现在过滤器列表中的顺序依次执行。
过滤器可以阻止动作及后面其他过滤器的执行。
过滤器可以定义为一个控制器类的方法。
过滤器方法名必须以filter开头。
例如,现有的filterAccessControl方法定义了一个名为accessControl的过滤器。
过滤器方法必须为如下结构:
publicfunctionfilterAccessControl($filterChain)
{
//调用$filterChain->run()以继续后续过滤器与动作的执行。
}
$filterChain(过滤器链)是一个CFilterChain的实例,代表与所请求动作相关的过滤器列表。
在过滤器方法中,我们可以调用$filterChain->run()以继续执行后续过滤器和动作。
如动作一样,过滤器也可以是一个对象,它是CFilter或其子类的实例。
如下代码定义了一个新的过滤器类:
classPerformanceFilterextendsCFilter
{
protectedfunctionpreFilter($filterChain)
{
//动作被执行之前应用的逻辑
returntrue;//如果动作不应被执行,此处返回false
}
protectedfunctionpostFilter($filterChain)
{
//动作执行之后应用的逻辑
}
}
要对动作应用过滤器,我们需要覆盖CController:
:
filters()方法。
此方法应返回一个过滤器配置数组。
例如:
classPostControllerextendsCController
{
......
publicfunctionfilters()
{
returnarray(
'postOnly+edit,create',//将postOnly过滤器应用于edit和create动作(这是基于方法的过滤器)
array(//使用了数组来配置过滤器
'application.filters.PerformanceFilter-edit,create',
//将application.filters.PerformanceFilter过滤器应用于除了edit和create之外的所有动作(这是基于对
象的过滤器)
'unit'=>'second',//初始化过滤器对象中的unit属性值为second
),
);
}
}
上
述代码指定了两个过滤器:
postOnly和PerformanceFilter。
postOnly过滤器是基于方法的(相应的过滤器方法已在
CController中定义);而performanceFilter过滤器是基于对象的。
路径别名
application.filters.PerformanceFilter指定过滤器类文件是
protected/filters/PerformanceFilter。
我们使用一个数组配置PerformanceFilter
,这样它就可被用于初始化过滤器对象的属性值。
此处PerformanceFilter的unit属性值将被初始为second。
使
用加减号,我们可指定哪些动作应该或不应该应用过滤器。
上述代码中,postOnly应只被应用于edit和create动作,而
PerformanceFilter应被应用于除了edit和create
之外的动作。
如果过滤器配置中没有使用加减号,则此过滤器将被应用于所有动作。
五、模型(Model)
模型是CModel或其子类的实例。
模型用于保持数据以及与其相关的业务逻辑。
模型是单独的数据对象。
它可以是数据表中的一行,或者一个用户输入的表单。
数据对象的每个字段对应模型中的一个属性。
每个属性有一个标签(label),并且可以通过一系列规则进行验证。
Yii实现了两种类型的模型:
表单模型和ActiveRecord。
二者均继承于相同的基类CModel。
表单模型是CFormModel的实例。
表单模型用于保持从用户的输入获取的数据。
这些数据经常被获取,使用,然后丢弃。
例如,在一个登录页面中,我们可以使用表单模型用于表示由最终用户提供的用户名和密码信息。
ActiveRecord(AR)是一种用于通过面向对象的风格抽象化数据库访问的设计模式。
每个AR对象是一个CActiveRecord或其子类的实例。
代表数据表中的一行。
行中的字段对应AR对象中的属性。
六、视图
视图是一个包含了主要的用户交互元素的PHP脚本.
视
图有一个名字,当渲染(render)时,名字会被用于识别视图脚本文件。
视图的名称与其视图脚本名称是一样的。
例如:
视图edit
的名称出自一个名为edit.php的脚本文件。
要渲染时,需通过传递视图的名称调用
CController:
:
render()。
这个方法将在“protected/views/控制器ID”目录下寻找对应的视图文件。
在视图脚本内部,我们可以通过$this来访问控制器实例。
我们可以在视图里以“$this->属性名”的方式获取控制器的任何属性。
我们也可以用以下推送的方式传递数据到视图里:
$this->render('edit',array(
'var1'=>$value1,
'var2'=>$value2,
));
在以上的方式中,render()方法将提取数组的第二个参数到变量里。
其产生的结果是,在视图脚本里,我们可以直接访问变量$var1和$var2。
1、布局
布局是一种用来修饰视图的特殊的视图文件。
它通常包含了用户界面中通用的一部分视图。
例如:
布局可以包含header和footer的部分,然后把内容嵌入其间。
......headerhere......
......footerhere......
其中的$content则储存了内容视图的渲染结果。
当
使用render()时,布局被隐式应用。
视图脚本protected/views/layouts/main.php
是默认的布局文件。
这可以通过改变CWebApplication:
:
layout进行自定义。
要渲染一个不带布局的视图,则需调用
renderPartial()。
2、小物件
小物件是CWidget或其子类的实例。
它是一个主要用于表现数据的组件。
小物件通常内嵌于一个视图来产生一些复杂而独立的用户界面。
例如,一个日历小物件可用于渲染一个复杂的日历界面。
小物件使用户界面更加可复用。
我们可以按如下视图脚本来使用一个小物件:
beginWidget('小物件类的路径别名'[,'包含属性初始化值的数组']);?
>
...可能会由小物件获取的内容主体...
endWidget();?
>
或者
widget('小物件类的路径别名'[,'包含属性初始化值的数组']);?
>
后者用于不需要任何body内容的组件。
小物件可通过配置来定制它的表现。
这是通过调用CBaseController:
:
beginWidget或CBaseController:
:
widget设置其初始化属性值来完成的。
我们通过传递一个携带这些属性初始化值的数组来实现,该数组的键是属性的名称,而数组的值则是小物件属性所对应的值。
如下所示:
$this->widget('CMaskedTextField',array(
'mask'=>'99/99/9999'
));
?
>
继承CWidget并覆盖其init()和run()方法,可以定义一个新的小物件:
classMyWidgetextendsCWidget
{
publicfunctioninit()
{
//此方法会被CController:
:
beginWidget()调用
}
publicfunctionrun()
{
//此方法会被CController:
:
endWidget()调用
}
}
小物件可以像一个控制器一样拥有它自己的视图。
默
认情况下,小物件的视图文件位于包含了小物件类文件目录的views
子目录之下(protected/components/views)。
这些视图可以通过调用CWidget:
:
render()渲染,这一点和控制器很
相似。
唯一不同的是,小物件的视图没有布局文件支持。
另外,小物件视图中的$this指向小物件实例而不是控制器实例。
3、系统视图
系统视图的渲染通常用于展示Yii的错误和日志信息。
系统视图的命名遵从了一些规则。
比如像“errorXXX”这样的名称就是用于渲染展示错误号XXX的CHttpException的视图。
例如,如果CHttpException抛出一个404错误,那么error404就会被显示。
在framework/views下,Yii提供了一系列默认的系统视图.他们可以通过在protected/views/system下创建同名视图文件进行自定义。
七、组件
Yii应用建立于组件之上。
组件是CComponent或其子类的实例。
使用组件主要涉及访问它的属性以及触发或处理它的时间。
基类CComponent指定了如何定义属性和事件。
1、组件属性
组件的属性就像对象的公共成员变量。
它是可读写的。
要定义一个组件属性,我们只需在组件类中定义一个公共成员变量即可。
更灵活的方式是定义其getter和setter方法,例如:
publicfunctiongetTextWidth()//获取textWidth属性
{
return$this->_text
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- yii 快速 入门 参考
![提示](https://static.bdocx.com/images/bang_tan.gif)