当前位置:首页 > CMS教程 > 其它CMS > 列表

Yii中特殊行为ActionFilter的使用方法示例

发布:smiling 来源: PHP粉丝网  添加日期:2022-03-28 11:57:21 浏览: 评论:0 

这篇文章主要给大家介绍了关于Yii中特殊行为ActionFilter的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

新建 app\filters\LoggingFilter 继承 yii\base\ActionFilter

LoggingFilter 的功能: 在指定请求的 action 前后各记录一条日志

  1. <?php 
  2.  
  3. namespace app\filters; 
  4.  
  5. use yii\base\ActionFilter; 
  6.  
  7. class LoggingFilter extends ActionFilter 
  8.  public function beforeAction($action
  9.  { 
  10.   parent::beforeAction($action); 
  11.  
  12.   // To do something 
  13.   printf('This is a logging for %s\beforeAction.%s'$this->getActionId($action), PHP_EOL); 
  14.  
  15.   return true; 
  16.  } 
  17.  
  18.  public function afterAction($action$result
  19.  { 
  20.   parent::afterAction($action$result); 
  21.  
  22.   // To do something 
  23.   printf('This is a logging for %s\afterAction.%s'$this->getActionId($action), PHP_EOL); 
  24.  
  25.   return true; 
  26.  } 

新建 app\controllers\SystemController

  1. <?php 
  2.  
  3. namespace app\controllers; 
  4.  
  5. use app\filters\LoggingFilter; 
  6.  
  7. class SystemController extends \yii\web\Controller 
  8.  public function behaviors() 
  9.  { 
  10.   parent::behaviors(); 
  11.  
  12.   return [ 
  13.    'anchorAuth' => [ 
  14.     'class' => LoggingFilter::className(), 
  15.     'only' => ['test''test-one'], // 仅对 'test'、'test-one' 生效 
  16.     'except' => ['test-one'], // 排除 'test-one' 
  17.    ], 
  18.   ]; 
  19.  } 
  20.  
  21.  public function actionTestOne() 
  22.  { 
  23.   printf('This is a testing for %s.%s'$this->getRoute(), PHP_EOL); 
  24.  } 
  25.  
  26.  public function actionTestTwo() 
  27.  { 
  28.   printf('This is a testing for %s.%s'$this->getRoute(), PHP_EOL); 
  29.  } 
  30.  
  31.  public function actionTest() 
  32.  { 
  33.   printf('This is a testing for %s.%s'$this->getRoute(), PHP_EOL); 
  34.  } 

测试

请求 http://yii.test/index.php?r=system/test

This is a logging for test\beforeAction.

This is a testing for system/test.

This is a logging for test\afterAction.

请求 http://yii.test/index.php?r=system/test-one

This is a testing for system/test-one.

请求 http://yii.test/index.php?r=system/test-two

This is a testing for system/test-two.

总结

Yii 中的 ActionFilter(过滤器)相当于 Laravel 中的 Middleware(中间件),beforeAction 相当于前置中间件,afterAction 相当于后置中间件。

Tags: Yii特殊行为 ActionFilter

分享到: