Yii 行为简单应用

技巧库 · stoneyang · 于 19天前 发布 · 203 次阅读

一个简单的行为案例。场景是在后台,每个用户操作了什么(也就是访问了那个链接),都会记录日志。 不多说,看代码:

common文件夹下新建behaviors文件夹,再创建该类。

<?php
namespace common\behaviors;

use Yii;
use yii\web\Controller;
use yii\base\Behavior;
use yii\web\Request;

class LogactionBehavior extends Behavior
{
    /**
     * 保存注入的 yii\web\Request 实例
     * @var yii\web\Request
     */
    private $request;

    /**
     * 运用传说中的依赖注入 注入 yii\web\Request
     * @param array $config
     * @param yii\web\Request  $request
     */
    public function __construct(Request $request,$config =[])
    {
        $this->request = $request;
        parent::__construct($config);
    }

    /**
     * 给事件设置触发函数。
     * 将 beforeAction 函数注册到 Controller::EVENT_BEFORE_ACTION 事件中
     * 将 afterAction 函数注册到 Controller::EVENT_AFTER_ACTION 事件中
     * @return array
     */
    public function events()
    {
        return [
            Controller::EVENT_BEFORE_ACTION => 'beforeAction',
            Controller::EVENT_AFTER_ACTION => 'afterAction'
        ];
    }

    /**
     * 每次访问时,记录访问的情况到日志里。
     */
    public function beforeAction()
    {
        $date =date("Y/m/d h:i:sa");
        $url = $this->request->url;
        $ip = $this->request->userIP;
        $params = $this->request->getRawBody();
        $log = $date."   ".$url."  ".$params."   ".$ip;
        Yii::info($log);
        Yii::beginProfile('myBenchmark');//开启运行分析,会对数据库查询时间等信息计入日志,myBenchmark 可修改自己设定标识符,会写入日志
    }

    public function afterAction()
    {
        Yii::endProfile('myBenchmark');//结束运行分析
    }
}

注释写的很清楚。 控制器中注册行为

public function behaviors()
    {
        return [
            LogactionBehavior::className(),
        ];
    }

配置在不同的应用配置文件中,配置components属性

        'log'=>[
            'targets' => [
                [
                    'class'=> 'yii\log\FileTarget',
                    'levels' => ['info','profile'],
                    'logVars' => [],
                ]

            ]
        ]

指定不同的驱动,可将日志保存在不同地方。

简单用法就这样,有什么奇淫技巧大家可以一块讨论讨论。

本文由 stoneyang 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。

本帖已被设为精华帖!
共收到 0 条回复
没有找到数据。
添加评论 (需要登录)