假定当前控制器是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中对应的部分也无法使用