- CController中预定义了几个filter,可以直接使用,它们是:filterAccessControl():验证是否有权限;filterAjaxOnly():只接受ajax请求;filterPostOnly():只接受post请求
- 要使用filterAccessControl(),必须在controller中覆写accessRules()方法
- 在action中调用其他action,yii的controller提供的三种方法:1.run($actionid):依照所指定action所在的controller中的filters()中设定的过滤器运行指定action;2.runActionWithFilters($actionid,$filters):依照第二个参数给定的filter运行action;3.runAction()
- controller的每一个action其实都是CInlineAction的对象,yii用什么方法实现这种效果,还需要研究。所以action()有对象式的用法:$action->run()
- beforeAction($action)和afterAction($action)可以设定action执行前后应该进行什么样的操作。beforeAction常会用来判断action是否可以执行,所以必须返回一个布尔值,只有ture时action才会继续执行。
- controller中的属性uniqueId是controller id + module id
- 数据表的model是CActiveRecord的派生,覆写rules()方法,可以指定每个字段的验证方法,一般情况下系统自带了提示信息,但是也可以自定义自己的提示信息,如:
1<br />array('title, content', 'required','message'=>'Please enter a value for {attribute}.'),<br />
- yii的model分为两种,一种是收集用户输入数据后丢弃,一种是搜集用户数据写入数据库,前者是表单模型CFormModel后者是AR模型CActiveRecord。它们都继承了CModel,拥有一些共同的属性方法,比如在接收输入数据时,都可以使用$model->attributes=$_POST['form'];的形式一次获得所有表单提交的数据。CModel继承自CComponent,而CComponent中实现了__set和__get,对于未定义的属性name,会自动在方法中寻找setName()来执行
- CUserIdentity只有两个属性,username和password,要想给app()->user更多的属性,需要用$this->setState(‘dateline’, $var);的方法。在session中会储存相应的数据
- CUserIdentity验证成功后,会自动跳转至CWebUser的returnUrl属性所指定的页面,可以用Yii::app()->user->returnUrl = $this->createUrl(”);来修改这个页面
- CUserIdentity在登陆时选择了remember me后,登陆后在session和cookie中都会保存登陆信息,否则只保存在session中
- 在config/main.php中可以在user数组中指定loginUrl,当遇到需要验证登录才能访问的方法时,系统自动回调到loginUrl的页面。loginurl接受的数据是个数组,结构是array(‘contrler/action’)
- 在main中指定’language’=>’zh_cn’,各种yii自带的提示信息就会变成中文
- 在model中可以用$this->addError(‘password’,'错误的账号或密码’); 来返回自己的错误信息,第一个参数是指定错误信息对应哪个表单项
- controller中有个module属性,它是module对象,用$this->module->id可以获得module的id,action中有个controller属性,它是controller对象,用$this->controller->id可以获得controller的id
- layout可以在application中或者在controller中的layout属性来设置.//layout/abc 指的是protected/views/layout目录,/layout/abc指的是相应module目录下的views/layout目录
- 用$this->renderPartial()可以在view页面中调用其他视图文件,它的前三个参数和其他的render方法一样,第一个是视图文件地址,不带后缀名,可以带相对路径,如“../inc”;第二个参数是要向此视图文件中传递的变量,须是数组,key是变量名,value是变量值;第三个参数是布尔型,为true时渲染视图的结果作为字符串被返回;第四个参数processOutput也是布尔型,是否将返回的数据用post方式处理,具体作用还不明
- processOutput是controller中的方法,一般在渲染视图结束时才会调用,它的作用是把在系统中注册的css或者js的引用加入到要输出的页面内容中。
- 几种不同的render方法,render($view,$data,$return),渲染视图时预先加载布局文件,$view视图文件,$data传递变量,$return是否将渲染结果以字符串返回;renderPartial($view,$data,$return,$processOutput),直接渲染指定视图不预载布局,$processOutput是否对渲染结果进行后期处理,如加入注册的css和js。renderText($text,$return),预载布局,渲染一条静态文本后放入布局文件中;renderDynamic($callbak),适用于页面的大部分已经被缓存为静态,只有局部需要动态变化的情况。具体用法待研究。
- CHtml::link($text,$url,$htmloption),$text:链接文字,$url:如果是字符串,链接地址就是这个字符串,如果是数组,链接地址就按照createUrl的方式来生成Url,第一个数组元素是module+controller+action的ID,第二第三……个数组元素是url的get参数
- reder()方法的第一个参数是指定视图文件,例如’view’是指当前方法目录下的view.php文件;’/view’,如果有module,则是指当前module下的view根目录的view.php文件,如果无module则指application下的view根目录的view.php文件;’//view’,指application的view根目录下的view.php文件。
- AR的model获取数据的find方法有以下几种:find($conditon,$params);findByPk($pk,$condition,$param);findByAttritutes($attributes,$condition,$params),$attributes是数组,按列指定查询条件,例如array(‘name’=>’xiaoli’,'age’=>20,’color’=>array(‘white’,'black’)),这个数据就是产生 name=’xiaoli’ AND age=20 AND color in (‘white’,'black’)的查询条件。$condition参数可以是字符串,这时它就是直接的查询条件,如果查询条件中有预处理变量,则第三个参数$params就是提供预处理变量应该绑定的实际值;如果$condition是数组,则这个数据会被用来创建一个CDbCriterial对象,来生成查询条件。
- CDbCriterial的构建器接收一个数组,数据可以包含以下元素,select:要提取的数据列;condition:字符串,查询语句,可以含有预处理变量;params:预处理绑定变量。也可以生成CDbCriterial对象后直接赋值,如
1<br />$creterail = new CDbCriterail(); $creterail->select = 'title'; $creterail->condition = 'name like :name'; $creterail->params = array(':name'=>'xiaoli')<br />
- 生成select表单元素,使用CActiveForm的dropDownList()方法,这个方法是对CHtml::activeDropDownList()方法的包装,所以他们的参数是一样的,第一个参数是$model,第二个参数是$attribute,第三个参数是$data,它提供select所需要的option选项,它可以直接是关联数组,如array(‘key’=>’value’),或者使用CHtml::listData()来提供。CHtml::listData(),第一个参数$models,是一组数据库提取的数据,如queryAll()的结果,第二个参数是$valueField,它是数据对象中用来作为option的显示值的字段,第三个参数是$keyField,它是数据对象中用来作为option的获取值的字段,第四个参数是$groupField,如果option要分组,这个字段是用来对option进行分组。CHtml::listOptions()是使用CHtml::listData()直接用来生成option的html的代码的,它一般是在activeDropDownList()内部被调用,不是给我们拿来用的。
- CDbCriteria用来生成数据库查询用的SQL条件,它有如下属性——alias:指定表的别名;condition:指定查询条件;distinct:?;group:指定group;having:应用在group-by上的条件;join:如何和其他表联合;limit:指定limit;offset:数据起始点;order:排序;paramCount:?;params:绑定的参数;select:要获取的列;together:外来表是否和主体表联合到一条sql语句中,只在关联AR中有效。
- 配置文件config/main.php中可以设置
‘errorHandler’=>array(‘errorAction’=>’site/error’,)
制定处理错误信息的方式。 - CActiveRecord类型的model中属性isNewRecord用来标示当前model是新增数据还是已有数据,方法getIsNewRecord()用来判读model是否新增数据。如果model是用new ModelNme 来建立的,那isNewRecord默认就是true
- 用CActiveForm创建文件上传的form,需要这样做
1<br />$form=$this->beginWidget('CActiveForm',array('htmlOptions'=>array('enctype' => 'multipart/form-data'),));<br />
- CGridView使用table列出数据,每一行数据都是一个数据对象,CGridView是一个Widget,使用方法如下:
1<br />$this->widget('zii.widgets.grid.CGridView', array(<br /> 'dataProvider'=>$dataProvider,<br /> 'columns'=>array(<br /> 'title', // 显示title属性<br /> 'category.name', //显示关联数据category的name属性<br /> 'content:html', // 显示HTML净化数据<br /> array( // display 'create_time' using an expression<br /> 'name'=>'create_time',<br /> 'value'=>'date("M j, Y", $data->create_time)',//一个php表达式<br /> ),<br /> array( // display 'author.username' using an expression<br /> 'name'=>'authorName',<br /> 'value'=>'$data->author->username',<br /> ),<br /> array( // display a column with "view", "update" and "delete" buttons<br /> 'class'=>'CButtonColumn',<br /> ),<br /> ),<br />));<br />
- controller中用filter方法可以设定页面静态缓存,如:
1<br />public function filters()<br /> {<br /> return array(<br /> array(<br /> 'system.web.widgets.COutputCache+view',//指定view方法应用此页面静态缓存的filter,如果不指定"+action",则对控制器下的所有方法都有效<br /> 'duration'=>86400,//缓存时间<br /> 'varyByRoute'=>true,//是否根据route生成缓存id<br /> 'varyByParam'=>array('id'),//缓存id依据的参数<br /> ),<br /> );<br /><br /> }<br />