当前位置:首页 > 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. { 
  9.  public function beforeAction($action) 
  10.  { 
  11.   parent::beforeAction($action); 
  12.  
  13.   // To do something 
  14.   printf('This is a logging for %s\beforeAction.%s', $this->getActionId($action), PHP_EOL); 
  15.  
  16.   return true; 
  17.  } 
  18.  
  19.  public function afterAction($action, $result) 
  20.  { 
  21.   parent::afterAction($action, $result); 
  22.  
  23.   // To do something 
  24.   printf('This is a logging for %s\afterAction.%s', $this->getActionId($action), PHP_EOL); 
  25.  
  26.   return true; 
  27.  } 
  28. } 

新建 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. { 
  9.  public function behaviors() 
  10.  { 
  11.   parent::behaviors(); 
  12.  
  13.   return [ 
  14.    'anchorAuth' => [ 
  15.     'class' => LoggingFilter::className(), 
  16.     'only' => ['test', 'test-one'], // 仅对 'test'、'test-one' 生效 
  17.     'except' => ['test-one'], // 排除 'test-one' 
  18.    ], 
  19.   ]; 
  20.  } 
  21.  
  22.  public function actionTestOne() 
  23.  { 
  24.   printf('This is a testing for %s.%s', $this->getRoute(), PHP_EOL); 
  25.  } 
  26.  
  27.  public function actionTestTwo() 
  28.  { 
  29.   printf('This is a testing for %s.%s', $this->getRoute(), PHP_EOL); 
  30.  } 
  31.  
  32.  public function actionTest() 
  33.  { 
  34.   printf('This is a testing for %s.%s', $this->getRoute(), PHP_EOL); 
  35.  } 
  36. } 

测试

请求 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

分享到: