我正在尝试在用户登录时更新列映射值。
当前,我的记录器初始化如下:
$columnMap = [
'timestamp' => 'timestamp',
'priority' => 'priority',
'priorityName' => 'priorityName',
'message' => 'message',
'extra' => array(
'userid' => 'userid'
)
];
$writer = new \Zend\Log\Writer\Db($dbAdapter,'logs',$columnMap);
$formatter = new \Zend\Log\Formatter\Db();
$formatter->setDateTimeFormat("Y-m-d H:i:s");
$writer->setFormatter($formatter);
$this->logger->addWriter($writer);
我想做的是在用户登录时更新userid extra field
。最有可能发生在Module Class
内部。可以通过服务管理器访问记录器。
答案 0 :(得分:1)
似乎您需要一个侦听器。与此类似的东西可能适合您的需求:
<?php
namespace Authentication\Listener;
use Zend\EventManager\EventManagerInterface;
use Zend\EventManager\ListenerAggregateInterface;
use Zend\Mvc\MvcEvent;
class addFieldListener implements ListenerAggregateInterface
{
//@todo add annotations
protected $logger;
/**
* @var array
*/
protected $listeners = [];
// @todo strict type
public function __construct($logger)
{
$this->setLogger($logger);
}
//You might have to change the priority, which is currently 1,
public function attach(EventManagerInterface $events, $priority = 1)
{
$this->listeners[] = $events->attach(MvcEvent::EVENT_ROUTE, [$this, 'addField'], $priority);
}
public function detach(EventManagerInterface $events)
{
foreach ($this->listeners as $index => $listener) {
if ($events->detach($listener)) {
unset($this->listeners[$index]);
}
}
}
public function addField()
{
//Get logger and add field.
}
//Getters & setters.. ?
}
配置:module.config.php
<?php
use Authentication\Listener\addFieldListener;
return [
'listeners' => [
addFieldListener::class,
],
'service_manager' => [
'factories' => [
addFieldListener::class => addFieldListenerFactory::class,
],
],
];
注意:确保工厂将记录器提供给侦听器。