鍍金池/ 問答/PHP/ YII2 如何書寫并且配置在所有action請求之前和之后?

YII2 如何書寫并且配置在所有action請求之前和之后?

這個是我的ActionTimeFilter 那么如何在web.php中配置才能啟用每個action都會通過這個過濾器? 在線等,急急急 搞了一天了~ 有大牛嗎

<?php
namespace app\filters;

use Yii;
use yii\base\Action;
use yii\base\ActionFilter;

class ActionTimeFilter extends ActionFilter
{
    private $_startTime;

    public function beforeAction($action)
    {
        Yii::info('2222222222222');
        $this->_startTime = microtime(true);
        return array(
            'dd'=>2
        );
        return parent::beforeAction($action);
//        return parent::beforeAction($action);
    }

    public function afterAction($action, $result)
    {
        $time = microtime(true) - $this->_startTime;
        Yii::debug("Action '{$action->uniqueId}' spent $time second.");
        \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
        return array(
            'dd'=>2
        );
//        $time = microtime(true) - $this->_startTime;
//        Yii::debug("Action '{$action->uniqueId}' spent $time second.");
//        Yii::$app->response->format=Response::FORMAT_JSON;
        return parent::afterAction($action, $result);
    }
}
回答
編輯回答
卟乖
親測可用:
class BaseActiveController extends \yii\rest\ActiveController
{
    public function behaviors()
    {
        $behaviors = parent::behaviors();

        $behaviors['timeFilter'] = [
            'class' => 'app\filters\ActionTimeFilter',
            'except'=>['test']
        ];

        return $behaviors;
    }
}
值得注意的是,behaviors() 中需要繼承父類 behaviors() 方法返回的內(nèi)容,否則父類 behaviors()就會被完全覆蓋了。
2017年5月19日 21:19
編輯回答
傻叼

你需要先建一個通用的控制器

use yii\web\Controller;

class CommonController extend Controller {
  public function behaviors() {
    return [
      'timeFilter' => 'app\filters\ActionTimeFilter',
    ];
  }
}

其他控制器繼承這個就行了

2017年6月28日 03:34