繁体   English   中英

cakephp数据库记录器 - 如何访问控制器变量?

[英]cakephp database logger - how to access controller variable?

我遵循cakephp文档来实现数据库记录器功能。 在创建了记录器类之后,我完成了所有工作

app/Lib/Log/Engine/DatabaseLogger.php

并将这些行添加到bootstrap

CakeLog::config('otherFile', array(
'engine' => 'DatabaseLogger',
'model' => 'LogEntry',
// ...
));

在此之后我可以通过调用登录到数据库

CakeLog::info(message);

一切正常,但后来我遇到问题尝试自动记录用户的用户名和IP地址。 我已经搜索了许多解决方案onlien但我似乎无法找到答案。 是否可以访问DatabaseLogger类中的控制器?

您无需访问控制器

您需要的信息实际上是全局的,您无需访问控制器对象即可获取它。

客户端IP

您可以使用Router :: getRequest方法获取当前请求对象并从中检索客户端IP:

$request = Router::getRequest();
$ip = $request->clientIp();

或者只是使用env方法:

$ip = env('REMOTE_ADDR');

当前用户的名字

为此,只需使用静态会话接口

$name = CakeSession::read('Auth.User.name');

这有望让你朝着正确的方向前进。 我目前正在将一些CakePHP应用程序迁移到2.2。 我不是100%肯定这一点,但似乎是关于这个问题的方法。 我正在考虑使用数据库日志记录,我喜欢你的想法,所以让我知道这是如何工作的。 如果没有,请提供反馈,我会深入挖掘。 ;)

创建LogEntry模型(数据库表)以包含用户名和IP地址的字段。

创建一个AppController。 在beforeFilter方法中,将用户的IP地址放在其会话中。 CakeRequest对象将包含其IP地址。

$this->request->clientIp();

在该模型的beforeSave()方法中,您将收集用户名和IP地址。

要访问用户名字段(假设您使用Auth组件和clientIp作为其IP地址的密钥):

App::import('Component', 'Session');
$Session = new SessionComponent();
$user = $Session->read('Auth.User');
$ip = $Session->read('clientIp');

将这些分配给正确的字段,以便保存它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM