YII如何给所有的Controller都设置同一个过滤器?

徐建兴 发布于 2014/06/27 12:13
阅读 1K+
收藏 1

首先来看代码:

class UserController extends Controller {
    public function filterIsSessionWrong($filterChain){
         if (isset(Yii::app()->user->userId)&&(!empty(Yii::app()->user->userId))) {
           
                $filterChain->run();
        } else {

            _echo(2, '用户id获取失败,您需要重新登录');
            $this->redirect(array('user/login'));
        }
     
        
    }
    
     public function filters()  {
        
            return array(  'IsSessionWrong - login,register',  );
    

  
     

     }



由于客户端是手机。手机访问是通过session来访问的。当这个session不存在的时候,就告诉客户端需要重新登录一下(默认是10天)。

但是我这样做只能在UserController中间(除去注册与登录不需要判断外)去过滤。事实上所有的controller都要检验一下。如果都要检验一下的话,我不得不将这一段代码复制到所有的controller。请问有没有好的方法,将这个判断session的设置为所有的Controller都起作用?    

加载中
1
喂码呢
喂码呢

可以在你的项目里的protected/components/Controller.php文件里做登录验证,我就是这么搞滴:

    /** 
     *filters
     */
    public function filters(){
        return array(
                array('application.filters.LoginFilter'),//验证是否登录
        );  
    }   
这个LoginFilter定义在项目的filter目录(protected/filters/LoginFilter.php),在LoginFilter文件的preFilter()函数验证是否已登录就可以了。


0
亦可塞艇
亦可塞艇
再写一个类呗. 然后让其他的类继承
0
燧人氏
燧人氏
如果是模块的话,可以统一在 AbcModule.php 中设置
返回顶部
顶部