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


Posted in PHP onOctober 18, 2020

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

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

<?php

namespace app\filters;

use yii\base\ActionFilter;

class LoggingFilter extends ActionFilter
{
 public function beforeAction($action)
 {
  parent::beforeAction($action);

  // To do something
  printf('This is a logging for %s\beforeAction.%s', $this->getActionId($action), PHP_EOL);

  return true;
 }

 public function afterAction($action, $result)
 {
  parent::afterAction($action, $result);

  // To do something
  printf('This is a logging for %s\afterAction.%s', $this->getActionId($action), PHP_EOL);

  return true;
 }
}

新建 app\controllers\SystemController

<?php

namespace app\controllers;

use app\filters\LoggingFilter;

class SystemController extends \yii\web\Controller
{
 public function behaviors()
 {
  parent::behaviors();

  return [
   'anchorAuth' => [
    'class' => LoggingFilter::className(),
    'only' => ['test', 'test-one'], // 仅对 'test'、'test-one' 生效
    'except' => ['test-one'], // 排除 'test-one'
   ],
  ];
 }

 public function actionTestOne()
 {
  printf('This is a testing for %s.%s', $this->getRoute(), PHP_EOL);
 }

 public function actionTestTwo()
 {
  printf('This is a testing for %s.%s', $this->getRoute(), PHP_EOL);
 }

 public function actionTest()
 {
  printf('This is a testing for %s.%s', $this->getRoute(), PHP_EOL);
 }
}

测试

请求 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 相当于后置中间件。

到此这篇关于Yii中特殊行为ActionFilter使用的文章就介绍到这了,更多相关Yii特殊行为ActionFilter使用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
通过对服务器端特性的配置加强php的安全
Oct 09 PHP
MySQL相关说明
Jan 15 PHP
php获取当前网址url并替换参数或网址的方法
Jun 06 PHP
PHP面向对象分析设计的61条军规小结
Jul 17 PHP
第4章 数据处理-php正则表达式-郑阿奇(续)
Jul 04 PHP
深入php 正则表达式的学习探讨
Jun 06 PHP
PHP如何利用P3P实现跨域
Aug 24 PHP
php合并数组中相同元素的方法
Nov 13 PHP
PHP命令空间namespace及use的用法小结
Nov 27 PHP
PHP实现的简单路由和类自动加载功能
Mar 13 PHP
django中的ajax组件教程详解
Oct 18 PHP
php的RSA加密解密算法原理与用法分析
Jan 23 PHP
PHP 99乘法表的几种实现代码
Oct 13 #PHP
php7连接MySQL实现简易查询程序的方法
Oct 13 #PHP
laravel7学习之无限级分类的最新实现方法
Sep 30 #PHP
如何利用PHP实现上传图片功能详解
Sep 24 #PHP
JS中彻底删除JSON对象组成的数组中的元素
Sep 22 #PHP
phpstudy隐藏index.php的方法
Sep 21 #PHP
如何在Laravel之外使用illuminate组件详解
Sep 20 #PHP
You might like
Windows下PHP5和Apache的安装与配置
2006/09/05 PHP
discuz安全提问算法
2007/06/06 PHP
PHP对表单提交特殊字符的过滤和处理方法汇总
2014/02/18 PHP
通过php修改xml文档内容的方法
2015/01/23 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
2016/03/21 PHP
PHP文件操作实例总结
2016/09/27 PHP
js插件方式打开pdf文件(浏览器pdf插件分享)
2013/12/20 Javascript
js实现Select头像选择实时预览代码
2015/08/17 Javascript
js实现input框文字动态变换显示效果
2015/08/19 Javascript
原生js和jquery分别实现横向导航菜单效果
2016/05/13 Javascript
关于JS变量和作用域详解
2016/07/28 Javascript
微信js-sdk地理位置接口用法示例
2016/10/12 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
2017/01/01 Javascript
vue-resource 拦截器(interceptor)的使用详解
2017/07/04 Javascript
Nodejs进阶之服务端字符编解码和乱码处理
2017/09/04 NodeJs
js+html5生成自动排列对话框实例
2017/10/09 Javascript
vue2.0 下拉框默认标题设置方法
2018/08/22 Javascript
详解 javascript对象创建模式
2020/10/30 Javascript
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
python 文件与目录操作
2008/12/24 Python
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
pycharm+django创建一个搜索网页实例代码
2018/01/24 Python
Python异常对代码运行性能的影响实例解析
2018/02/08 Python
python多线程并发让两个LED同时亮的方法
2019/02/18 Python
Python+OpenCV采集本地摄像头的视频
2019/04/25 Python
Python实现Restful API的例子
2019/08/31 Python
python单例模式原理与创建方法实例分析
2019/10/26 Python
python框架flask表单实现详解
2019/11/04 Python
Python如何实现远程方法调用
2020/08/07 Python
Python爬虫定时计划任务的几种常见方法(推荐)
2021/01/15 Python
《问银河》教学反思
2014/02/19 职场文书
行政专员岗位职责范本
2014/08/26 职场文书
反腐倡廉剖析材料
2014/09/30 职场文书
2015年五四青年节演讲稿
2015/03/18 职场文书
CSS3 制作的书本翻页特效
2021/04/13 HTML / CSS
win11怎么用快捷键锁屏? windows11锁屏的几种方法
2021/11/21 数码科技