yii filter自定义过滤器类的用法

原文地址:http://blog.sina.com.cn/s/blog_815611fb0101fahq.html


过滤器执行顺序为它们出现在过滤器列表中的顺序。

在yii protected/filters/下载新建 AuthFilter.php文件


<?php
class AuthFilter extends CFilter
{
    protected function preFilter($filterChain)
    {
        // 动作被执行之前应用的逻辑
        $user = Yii::app()->getUser();
        $controller=Yii::app()->controller->id; //获取当前控制器名
        $action=Yii::app()->controller->action->id;; //获取当前动作名
        if($user->isGuest)
        {
            if($controller!='site')
            {
                //如果控制器不是 site 就跳转到登录界面
                Yii::app()->controller->redirect(array('/site/login'));
            }
            else
            {
                //如果控制器是 site 就继续执行
                return true;
            }
        }
        else{
            //如果已登录就继续执行
            return true;
        }
        //return true; // 如果动作不应被执行,此处返回 false
    }
 
    protected function postFilter($filterChain)
    {
        // 动作执行之后应用的逻辑
    }
}
?>

这个过滤器代码文件的放置位置由下面代码指定

class PostController extends CController
{
    ......
    public function filters()
    {
       return array(

	array(
        'application.filters.AuthFilter',	 // 指定自定义过滤器类的位置为:protected/filters/PerformanceFilter

	'unit'=>'second'//初始化 PerformanceFilter 的 unit 属性值将被初始为 second)

           
       );
    }
}

也可以放在控制器的父类Controler.php中(路径是 protected/components/Controler.php)

这样就不用每个控制器都要写了,但是如果集成Controler的控制器重写了filters()方法,必须在方法中也要声明 'application.filters.AuthFilter',

<?php
/**
 * Controller is the customized base controller class.
 * All controller classes for this application should extend from this base class.
 */
class Controller extends CController
{
	/**
	 * @var string the default layout for the controller view. Defaults to '//layouts/column1',
	 * meaning using a single column layout. See 'protected/views/layouts/column1.php'.
	 */
	public $layout='//layouts/column1';
	/**
	 * @var array context menu items. This property will be assigned to {@link CMenu::items}.
	 */
	public $menu=array();
	/**
	 * @var array the breadcrumbs of the current page. The value of this property will
	 * be assigned to {@link CBreadcrumbs::links}. Please refer to {@link CBreadcrumbs::links}
	 * for more details on how to specify this property.
	 */
	public $breadcrumbs=array();
        
        public function filters()
	{
		return array(
			//'accessControl',
			array(
				'application.filters.AuthFilter',
			)
		);
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值