phalcon: plugin 结合Manager事件管理dispatcher调度控制器 监听sql日志记录或其他拦截出来

Posted 穆晟铭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了phalcon: plugin 结合Manager事件管理dispatcher调度控制器 监听sql日志记录或其他拦截出来相关的知识,希望对你有一定的参考价值。

可能用到的类 

phalcon\mvc\use\plugin

Phalcon\Mvc\Dispatcher as MvcDispatcher

Phalcon\Events\Manager as EventsManager

 

代码部分

public/index.php:

$di[‘db‘] = function() use($di){
        //log

       //事件管理
       $eventManager = new \Phalcon\Events\Manager();

        //继承了plugins的数据库sql操作类
        $eventQSql = new \Mydatabase();

        //附上一个侦听者
        $eventManager->attach("db", $eventQSql);

        $db=new DbAdapter(array(
            "host"     => "localhost",
            "username" => "root",
            "password" => "",
            "dbname"   => "demo",
            "charset"  => "utf8"
        ));

        //绑定事件
        $db->setEventsManager($eventManager);
        return $db;
        
};

  

app/plugins/Mydatabase.php

use Phalcon\Db\Profiler,
    Phalcon\Logger,
    Phalcon\Logger\Adapter\File as LoggerFile;

class Mydatabase extends \Phalcon\Mvc\User\Plugin {

    protected $_logger;
    protected $_profiler;

    public function __construct()
    {
        $this->_profiler = $this->profiler;// new  \Phalcon\Db\Profiler();
        $this->_logger = new LoggerFile("../log/sql.log");
    }

    public function beforeQuery()
    {
        $this->_logger->log($this->db->getSQLStatement   (), Logger::INFO);
        $this->_profiler->startProfile($this->db->getSQLStatement());
    }

    public function afterQuery()
    {
       $this->_logger->log($this->db->getSQLVariables  (), Logger::INFO);
        $this->_profiler->stopProfile();
    }




}

  每次执行sql语句的时候,发送的sql都会被记录到log文件里面。

 

以上是关于phalcon: plugin 结合Manager事件管理dispatcher调度控制器 监听sql日志记录或其他拦截出来的主要内容,如果未能解决你的问题,请参考以下文章

phalcon:官方多模块支models层,mode数据库配置

phalcon: 目录分组后的acl权限控制

如何使用 session-manager-plugin 命令

JMeter Plugins Manager

jmeter-plugins-manager安装

Jmeter5.1 Plugins Manager配置和dummy使用