以下是我的ActivityListener类。ContextErrorException: Catchable Fatal Error:在C:\ xampp \ htdocs \ sinfoc \ public \ app \ cache \ dev \ appDevDebugProjectContainer.php的第350行调用给定的Doctrine\Bundle\DoctrineBundle\Registry实例时,传递给Acme\SecurityBundle\EventListener\ActivityListener :: __ construct()的第二个参数必须是Doctrine\ORM\EntityManager的实例,并在C:\ xampp \ htdocs \ sinfoc \ public \ src \ Acme \ SecurityBundle \ EventListener \ ActivityListener.php的第22行中进行定义
public function __construct(SecurityContext $securityContext, EntityManager $entityManager)
{
$this->securityContext = $securityContext;
$this->entityManager = $entityManager;
}
下面是 listener 定义为服务的 services.yml 文件:
services:
activity_listener:
class: Bnpp\SecurityBundle\EventListener\ActivityListener
arguments: [@security.context, @doctrine.orm.entity_manager]
tags:
- { name: kernel.event_listener, event: kernel.controller, method: onCoreController }
这里是完整的ActivityListenerClass
<?php
namespace Bnpp\SecurityBundle\EventListener;
use Doctrine\ORM\EntityManager;
//use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\HttpKernel\HttpKernel;
use Bnpp\SecurityBundle\Entity\User;
use Doctrine\Bundle\DoctrineBundle\Registry;
/**
* Listener that updates the last activity of the authenticated user
*/
class ActivityListener
{
protected $securityContext;
protected $entityManager;
public function __construct(SecurityContext $securityContext, EntityManager $entityManager)
{
$this->securityContext = $securityContext;
$this->entityManager = $entityManager;
}
/**
* Update the user "lastActivity" on each request
* @param FilterControllerEvent $event
*/
public function onCoreController(FilterControllerEvent $event)
{
// Check that the current request is a "MASTER_REQUEST"
// Ignore any sub-request
if ($event->getRequestType() !== HttpKernel::MASTER_REQUEST) {
return;
}
// Check token authentication availability
if ($this->securityContext->getToken()) {
$user = $this->securityContext->getToken()->getUser();
if ( ($user instanceof User) && !($user->isActiveNow()) ) {
$user->setLastActivity(new \DateTime('now'));
$this->entityManager->flush($user);
}
}
}
}
doctrine.orm.default_entity_manager
。另外一个问题是 - 您正在使用哪个版本的Symfony? - Touki