新建 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 相当于后置中间件。
© 版权声明
THE END
暂无评论内容