YII如何给所有的Controller都设置同一个过滤器,而不是将过滤器的代码复制到一个个的controller?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了YII如何给所有的Controller都设置同一个过滤器,而不是将过滤器的代码复制到一个个的controller?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1991字,纯文字阅读大概需要3分钟。
内容图文
![YII如何给所有的Controller都设置同一个过滤器,而不是将过滤器的代码复制到一个个的controller?](/upload/InfoBanner/zyjiaocheng/236/0dd5107ce2794ff38819b4805a93e19f.jpg)
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都起作用?
回复内容:
首先来看代码:
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都起作用?
你可以定义一个filter继承自CFilter
,
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'));
}
}
}
然后在你的controller
中通过 filters
方法使用
class UserController extends Controller {
public function filters() {
return array(
array('application.filters.SessionCheckFilter - edit, create')
);
}
}
内容总结
以上是互联网集市为您收集整理的YII如何给所有的Controller都设置同一个过滤器,而不是将过滤器的代码复制到一个个的controller?全部内容,希望文章能够帮你解决YII如何给所有的Controller都设置同一个过滤器,而不是将过滤器的代码复制到一个个的controller?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。