【问题标题】:Cakephp 3 process code after page responseCakephp 3页面响应后的处理代码
【发布时间】:2017-01-12 20:36:59
【问题描述】:

我正在处理的项目的一个要求是我记录与该站点的连接,因为为了获取尽可能多的信息而进行的处理量很大,我想在页面完成后处理它已发回给用户。

目前我正在 appController 的 afterFilter 中运行我的代码:

public function afterFilter(Event $event){
    $log_request = new  RequestsController;
    $log_request->log_request();    
}

我正在尝试在我的 appController 的 afterRender 中运行它:

public function afterRender(Event $event, $viewFile){
   $log_request = new  RequestsController;
   $log_request->log_request();    
}

但我似乎无法执行代码,或者如果执行了,那么我不知道如何找出引发的错误。

如果有人可以向我指出正在执行此操作的示例或执行此操作的并发方法(需要在请求的一秒内记录),我将不胜感激。

【问题讨论】:

    标签: cakephp apache2 cakephp-3.0 php-7


    【解决方案1】:

    $log_request = new RequestsController; 你不会在控制器中实例化控制器。在使用基于 MVC 的框架时,您想首先学习 the MVC design pattern,否则您最终会得到一段不可维护的可怕意大利面条代码。我建议你做博客教程以获得基本的了解。

    如果有人可以向我指出正在执行此操作的示例或执行此操作的并发方法(需要在请求的一秒内记录),我将不胜感激。

    阅读本章:CakePHP Logging 取自那里:

    在 CakePHP 中记录数据很容易 - log() 函数由 LogTrait 提供,它是许多 CakePHP 类的共同祖先。如果上下文是一个 CakePHP 类(控制器、组件、视图...),您可以记录您的数据。也可以直接使用 Log::write()。

    将 log trait 添加到 AppController,将请求传递给 log() 方法并配置日志记录以将这些请求记录到您喜欢的任何位置 afterRender() 或者如果您想很晚才这样做,请在__destruct().

    【讨论】:

    • 我应该多解释一下!这些数据被记录到数据库中,并且需要在每个请求上执行,因为 appController 是我设置身份验证的地方,所以我决定将这段代码放在它下面。可以从控制器操作中查看数据。我同意这不属于这里,但我不知道在哪里放置它。按照您关于日志记录的链接,我是否应该有一个控制器来查看这些数据并使用日志记录功能将其写入数据库?如果是这样,在页面发送给客户端后我该怎么做?
    • 这不会改变我的答案。只需通过数据库日志引擎登录到数据库表。我不知道 CakePHP 核心是否发生了变化,但你可以试试这个,github.com/burzum/cakephp-database-log 它是文档中 DB 日志引擎的实现。只需阅读整个日志记录章节。此外,如果您收到很多请求,那么像这样记录到 SQL 数据库在性能方面也不是一个好主意。为什么网络服务器日志不够用?
    • 谢谢你 :) 我现在唯一悬而未决的问题是,在将响应发送给客户后如何执行此操作?我读过 PHP 不支持多线程,客户端在获取页面之前不应该等待这个处理。 (根据 cake 调试工具包大约需要 0.6ms)。之所以使用数据库,是因为该项目旨在根据这些信息的历史记录中的某些条件做出反应。
    • 您需要逐步完成并弄清楚何时调用 __destruct() 确切。但我很确定此时请求已经发送,只是清理和垃圾收集正在运行 php 内部。再次:检查手册php.net/manual/en/language.oop5.decon.php 此外,它被发送的事实并不意味着客户收到了它。 :) 根据要求的严格程度,我不会依赖它并尝试找到另一种解决方案。
    • 非常感谢您的帮助:)
    猜你喜欢
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 2014-09-07
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多