yii中获取GET、POST、COOKIE、SESSION的方法

Yii::app()->request->getParam(string $name, mixed $defaultValue=NULL) 相当于REQUEST

Yii::app()->request->getPost(string $name, mixed $defaultValue=NULL) 相当于post

Yii::app()->request->getBrowser() 返回用户浏览器的相关信息

Yii::app()->request->getCookies() 返回cookie信息

Yii::app()->session[‘name’];返回session信息

yii使用checkBoxList的时候如何进行选中

原本以为官方的手册中会提供相关的方法,但是查询以后发现没有,抱着尝试的态度在修改的时候将对应的字段转换成数据,然后居然成功了;

[php]

<?php
if($model->role_id) $model->role_id = explode(‘|’ ,$model->role_id);
echo $form->checkBoxList($model,’role_id’,$roles,array(‘separator’=>’&nbsp;’));
?>

[/php]

Yii modules中设置layout的方法

在入口控制器中设置
第一种,$this->layout = ‘main';
第二种,$this->layout = ‘/layouts/main';//如果用“//”开头默认会调用protected/view/layouts/main
第三种,$this->layout = ‘xxx.views.layouts.main';//xxx为模块的id

Yii配置权限管理

1、导入权限数据表
找到framework/web/auth/schema.sql ,导入到你的数据库

2、配置权限组件

[php][/php]

‘components‘ => array(
   //……
   ‘authManager‘=>array(
           ‘class‘=>‘CDbAuthManager‘,//认证类名称,此处为默认的,也可以修改成你自己的
           ‘connectionID’=>’db’,//使用的数据库组件
           ‘itemTable‘ => ‘pre_auth_item‘,//认证项表名称
           ‘itemChildTable‘ => ‘pre_auth_item_child‘,//认证项父子关系
           ‘assignmentTable‘ => ‘pre_auth_assignment‘,//认证项赋权关系
       ),
  //……

[php][/php]

 

 

3、判断是否具有访问权限

[php][/php]

if(Yii::app()->user->checkAccess(‘具体权限’)){

}

[php][/php]

这个方法可以用于视图中判断相应的权限按钮是否显示,同是也可以在 控制器的方法accessRules()中过滤登录的用户是否有使用权限;在前面配置认证类的时候可以重写一个自己的类来覆盖这个方法,原来的这个方法都是基于数据库处理的,为了不影响程序的性能可以考虑加上缓存的处理机制。

yii使用ajax验证表单数据的时候,如何同时验证两个模型?

一般情况下:

[php]

if(isset($_POST[‘ajax’]) && $_POST[‘ajax’]===’account-_form-form’)
{
echo CActiveForm::validate($model);
Yii::app()->end();
}

[/php]

解决方法:

[php]

if(isset($_POST[‘ajax’]) && $_POST[‘ajax’]===’account-_form-form’)
{
echo CActiveForm::validate(array($model1,$model2));
Yii::app()->end();
}

[/php]

yii加载框架自带的js或者css文件

加载核心框架自带的jquery:

[php]Yii::app()-&gt;clientScript-&gt;registerCoreScript(‘jquery’,CClientScript::POS_HEAD);[/php]

加载jquery-ui

[php]Yii::app()-&gt;clientScript-&gt;registerCoreScript(‘jquery.ui’,CClientScript::POS_HEAD);[/php]

加载jquery-ui的css文件

[php]Yii::app()-&gt;clientScript-&gt;registerCssFile(Yii::app()-&gt;clientScript-&gt;getCoreScriptUrl().’/jui/css/base/jquery-ui.css’);[/php]

yii框架中还带有其他的核心文件,可以参考/framework/web/js/packages.php

Invalid parameter number: number of bound variables does not match number of tokens

在yii框架中使用下面的代码

[php]

$criteria->addCondition(‘type=:type’);
$criteria->params = array(‘:type’=>2);

[/php]

得到

Invalid parameter number: number of bound variables does not match number of tokens

原来是绑定的参数不够,修改为:

[php]$criteria->params = array_merge($criteria->params,array(‘:type’=>2));[/php]

ok,搞定

yii配置多个二级域名同步登录

在main.php的components中加入下面的代码:

[php]<br />
//基于cookie登录<br />
‘user’=&gt;array(<br />
‘identityCookie’=&gt;array(‘domain’=&gt;’.51zwy.com’,’path’=&gt;’/’),<br />
‘allowAutoLogin’ =&gt; true,<br />
‘stateKeyPrefix’=&gt;’yourprefix’,//cookie前缀<br />
‘loginUrl’=&gt;array(‘user/login’),<br />
),<br />
//基于session登录<br />
‘session’=&gt;array(<br />
‘cookieParams’ =&gt; array(‘domain’=&gt;’.51zwy.com’,’lifetime’ =&gt; 0),<br />
‘timeout’ =&gt; 3600,<br />
),</p>
<p>[/php]

在yii中如何使用二级域名?

yii中使用二级域名的方法:

[php]</p>
<p>’urlManager’=&gt;array(<br />
‘urlFormat’=&gt;’path’,<br />
//’urlSuffix’=&gt;’.html’,<br />
‘showScriptName’=&gt;false,<br />
‘rules’=&gt;array(<br />
‘http://www.netljc.com’=&gt;’site/index’,<br />
‘http://www.netljc.com/&lt;action:\w+&gt;/*’=&gt;’site/&lt;action&gt;’,<br />
‘http://&lt;controller:\w+&gt;.51zwy.com’=&gt;’&lt;controller&gt;/index’,<br />
‘http://&lt;controller:\w+&gt;.51zwy.com/&lt;action:\w+&gt;/*’=&gt;’&lt;controller&gt;/&lt;action&gt;’,<br />
),<br />
),</p>
<p>[/php]

上面的方法可以用来为每一个控制器绑定一个二级域名,当然有同学会说,那要给模块绑定二级域名怎么办?

[php]</p>
<p>’urlManager’=&gt;array(</p>
<p>’urlFormat’=&gt;’path’,<br />
‘showScriptName’ =&gt; false,<br />
‘rules’=&gt;array(<br />
‘http://&lt;_m:\w+&gt;.51zwy.com&lt;_q:.*&gt;/*’=&gt;’&lt;_m&gt;&lt;_q&gt;’,<br />
)<br />
)<br />
[/php]

使用yii框架实现用户登录时更新登录时间的思路

yii框架支持用户基于cookie的登录方式,只需要在main.php中配置user组件的allowAutoLogin=>true即可实现。那么问题来了,有需求需要记录用户的登录时间怎么办?有同学会说在用户登录的时候更新用户的登录时间就是了啊。话说没错,但我们如果是基于cookie的登录,也就是浏览器记录了用户的相关信息,当我们关闭浏览器重新打开yii的程序的时候已经是登录状态了,不会在执行登录的动作,这个时候我们怎么更新用户的登录时间呢?

于是找到了处理用户的基类CWebUser,我们可以看看这个类初始化的时候干了些什么。找到init这个方法:

[php]public function init()<br />
{<br />
parent::init();<br />
Yii::app()-&gt;getSession()-&gt;open();<br />
if($this-&gt;getIsGuest() &amp;&amp; $this-&gt;allowAutoLogin) //匿名且允许自动登录<br />
$this-&gt;restoreFromCookie();<br />
elseif($this-&gt;autoRenewCookie &amp;&amp; $this-&gt;allowAutoLogin) //每次请求都更新cookie且允许自动登录<br />
$this-&gt;renewCookie();<br />
if($this-&gt;autoUpdateFlash)//更新消息的有效性<br />
$this-&gt;updateFlash();</p>
<p>$this-&gt;updateAuthStatus();<br />
}[/php]

看到这段代码的同学,我想已经知道处理的原理了吧!实际上用户重新打开浏览器的时候也有一个登录的动作。

restoreFromCookie()和renewCookie()两个方法都在调用saveToCookie()所以只需要重写这个方法就可以实现自动登录的时候更新登录时间。

继续查看代码还有一个afterLogin()方法,那我们是否也可以通过重写这个方法来实现呢?大家不妨试试。

注意在main.php中可以重新指定user的处理基类,这样我们就可以通过重新CWebUser来实现上述方法了。