YII的赋值功能tips(2)

假定当前控制器是post
那么可以能过/post/help/help/content访问help目录下的content.php
可以建立子目录比如help/reigterhelp/content.那可以通过/post/help/help/registerhelp.content来访问
用CViewAction的好处时,可以与其它的view共享layout


关于没有权限访问跳转的url相关
当没有权限时调用CAccessControlFilter类中的accessDenied,其调用CwebUser中的loginRequired(),记录当前的returnurl后跳转到CWebUser配置中的loginurl,在此处登陆后,可以通过redirect跳转到returnurl(Yii::app()->request->redirect(Yii::app()->user->returnUrl);)
当强制显示登陆表单,比如判断用户是guest就一直列出登陆表单,不会调用loginRequired, 就得不到returnurl,这时候想跳回去,参见cookbook上相关贴子


registerCoreScript
在framework/web/js/package.php中列出的才是


多对多关联条件

$criteria->addInCondition("categorys.id",$in);
$criteria->addSearchCondition('Shop.name',$keyword);
$shops=Shop::model()->with(array("categorys"=>array('together'=>true)))->findAll($criteria);

同时要在Shop模型中加入alias="categorys" ,另外together=true放在模型的关联中也可


YII中的RBAC权限,用数据库存item,
在system/web/auth下找到相应的sql导放到数据库中
配置'authManager' => array(
'class' => 'CDbAuthManager',
'connectionID' => 'db',
),
如果在sql中导入的三个表的表名不是默认的,需要在这上边的配置中配置,具体的看api

$auth=Yii::app()->authManager;
//$auth->createOperation("post",'postpost');
//$auth->createTask("post","posts");
$auth->createRole("post","post");
auth->assign("post",'demo');
if(Yii::app()->user->checkAccess("post")){
echo "yes";
else{
echo "no";
}

这种情况下三者是一样的


如何获得上一页的url以返回

Yii::app()->request->urlReferrer;


accessControl 是Ccontroller中内置的过滤方法,其它的还有ajaxOnly postOnly


CMaskedTextField此组件用于限制用户的输入,对应的jquery插件


在一对多,多对多查询时,the eager loading 联合所有的表生成一条语句,如果主表有limit的查询选项,那么他将单独执行,然后再执行与关联表有关的语句,返回相关表的数据对象,这就是为什么在做大优惠时,以中间表为查询条件出错的原因,解决办法
with()返回 CActiveFinder对象,其方法together(),既使主表中有LIMIT/OFFSET 也是返回一条sql;


多对多查询时,分页有时候页中显示的条数不正确,因为有重复的项,加上$criteria->group = true即可


模型的rules中,验证某个字段不能重复,array('name', 'unique','message' => '有重复的名子'),


CStatePersister是yii的核心组件,提供了基于文件的数据保存方式,可以不在同的请求中使用


COutputCache 即是一个组件,又是一个filter,前者的时候用于在view中缓存内容,后者的时候用于在controller中缓存
就是说片段缓存,是把COutputCache当一个widget来用,页面缓存把COutputCache当作一个filter来用

动态缓存,用CController的一个方法 renderDynamic($callback);


COutputCache几个属性,duration,dependency 另外还有几个,可以通称为Variation, 有什么作用呢?
在beginCache是需要手工指定一个id,Variation的作有就是自动给生成这个id


在布署模式的时候,有错误不会有stack样的提示,会显示一个errorxxx的错误


如何在程序有错的时候跳到指定的action
在components中设置

'errorHandler'=>array(
'errorAction'=>'site/error',
),

在此action中可以能过Yii::app()->errorHandler->error获得错误信息


把字符串分解成数组,并去掉空值

preg_split('/\s*,\s*/','this , is , , a test',-1,PREG_SPLIT_NO_EMPTY )


CActiveRecord::exits();判断有没有这样的记录,一般用于添加时,判断某字段有没有重复


CActiveDataProvider 一个基于ActiveRecord的数据提供源
常用的用法

$dataProvider=new CActiveDataProvider('Post', array(
'criteria'=>array(),
'pagination'=>array(),
'sort'=>array(), 
));


上如'sort'=>array(
'defaultOrder'=>'status, update_time DESC',
),
ClistView同上结合使用,其中的_view中可以用一个$data的变量,代表当前的model数据
如果dataProvider中的pagination,sort设为false,则CliveView中对应的部分也无法使用

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/11218.html