在web应用中,我们经产更需要显示静态页,如“关于我们”等,这些文件通常是静态页,通常有如下几种处理方法:
1.把独立的html文件存在Web服务器能直接访问的目录下。这种方案的缺点是很难维护网页布局以及和动态页的连接.
2.可以自己写action赖渲染view文件处理每一个静态页,这样解决了layout问题,但是为每一个页写一个单独的action,特别是这个action仅仅处理一个静态文本,非常麻烦。
3.使用Yii内置的一个CViewAction来服务所有这些页。
下面就介绍第三种方法:
首先,建立以个controller类如DocController,重载 actions 方法
public function actions() {
'captcha'=>array(//页面出错时怎么处理
'class'=>'CCaptchaAction',
'backColor'=>0xFFFFFF,
),
'page'=>array(
'class'=>'CViewAction',
'basePath'=>'tmp', //指定目录名
'defaultView'=>'default',
'viewParam'=>'help' //get参数
),
}
那么,当访问以下路径时 http:// yourWebPath / doc / page / help / about.php ,那么,将会以doc控制器的layout为框架,显示view/tmp/目录下的about.php页面。
用CViewAction的好处时,可以与其它的view共享layout 。至于后缀为html。则可以通过urlManager 组件的规则表达式来改写url。
=======================================================
关于没有权限访问跳转的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,