首頁 > 後端開發 > php教程 > YII如何给所有的Controller都设置同一个过滤器,而不是将过滤器的代码复制到一个个的controller?

YII如何给所有的Controller都设置同一个过滤器,而不是将过滤器的代码复制到一个个的controller?

WBOY
發布: 2016-06-06 20:44:48
原創
1104 人瀏覽過

首先来看代码:

<code class="lang-php"><br>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',  );



     }

</code>
登入後複製
登入後複製

由于客户端是手机。手机访问是通过session来访问的。当这个session不存在的时候,就告诉客户端需要重新登录一下(默认是10天)。
但是我这样做只能在UserController中间(除去注册与登录不需要判断外)去过滤。事实上所有的controller都要检验一下。如果都要检验一下的话,我不得不将这一段代码复制到所有的controller。请问有没有好的方法,将这个判断session的设置为所有的Controller都起作用?

回复内容:

首先来看代码:

<code class="lang-php"><br>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',  );



     }

</code>
登入後複製
登入後複製

由于客户端是手机。手机访问是通过session来访问的。当这个session不存在的时候,就告诉客户端需要重新登录一下(默认是10天)。
但是我这样做只能在UserController中间(除去注册与登录不需要判断外)去过滤。事实上所有的controller都要检验一下。如果都要检验一下的话,我不得不将这一段代码复制到所有的controller。请问有没有好的方法,将这个判断session的设置为所有的Controller都起作用?

你可以定义一个filter继承自CFilter,

<code class="lang-php">class SessionCheckFilter extends CFilter {
    protected function preFilter($filterChain) {

         if (isset(Yii::app()->user->userId) && (!empty(Yii::app()->user->userId))) {
            $filterChain->run();
        } else {
            _echo(2, '用户id获取失败,您需要重新登录');
            $this->redirect(array('user/login'));
        }
    }
}
</code>
登入後複製

然后在你的controller中通过 filters 方法使用

<code class="lang-php">class UserController extends Controller {

    public function filters() {
        return array(
            array('application.filters.SessionCheckFilter - edit, create')
        );
    }
}
</code>
登入後複製
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板