Ber*_*rdA 1 php events dependency-injection symfony doctrine-orm
我有一个事件侦听器,它设置一些会话变量,还检查访问者是否在上次访问时设置了某种类型的购物车,并在前端显示其详细信息。
该事件工作正常,直到尝试注入实体管理器,我需要在访问者实体上使用一些 setter/getter。
我也尝试过这个解决方案,但最终遇到了同样的问题,即“给出的字符串”而不是对象。
它产生的错误是:
类型错误:传递给 AppBundle\EventListener\InitializerListener::onKernelRequest() 的参数 2 必须是 Doctrine\ORM\EntityManager 的实例,给出的字符串
这是代码:]
服务.yml
app.initializer_listener:
class: AppBundle\EventListener\InitializerListener
arguments: ["@doctrine.orm.entity_manager"]
tags:
- { name: kernel.event_listener, event: kernel.controller, method: onKernelRequest }
Run Code Online (Sandbox Code Playgroud)
AppBundle\EventListener\IniatilizerListener
namespace AppBundle\EventListener;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\Response;
use UsedBundle\Entity\Visitor;
use Doctrine\Common\Persistence\ManagerRegistry;
use Doctrine\ORM\EntityManager;
class InitializerListener
{
private $event;
private $em;
public function onKernelRequest( FilterControllerEvent $event, EntityManager $em )
{
$visitor = new Visitor();
$this->em = $em;
$route = $event->getRequest()->get('_route');
if ($event->isMasterRequest() && '_wdt' !== $route ) {
$session = $event->getRequest()->getSession();
$cookies = $event->getRequest()->cookies;
$this->sessionInit( $session, $cookies );
//$this->visitorInit( $session, $cookies, $visitor );
//$em->persist($visitor);
//$em->flush();
}
}
private function sessionInit( $session, $cookies )
{
$session->set('active', time() );
$session->has('page_ct') ? $session->set('page_ct', $session->get('page_ct') + 1 ): $session->set('page_ct', 1 );
}
private function visitorInit($session, $cookies, $visitor)
{
//visitor setup/shopping cart here
}
}
Run Code Online (Sandbox Code Playgroud)
我认为您应该将 EntityManager 注入类而不是函数?(对 sf3 不是很熟悉,但这就是我在 sf2.8 中所做的)
class InitializerListener
{
private $event;
private $em;
public function __construct(EntityManager $em) {
$this->em = $em;
}
public function onKernelRequest( FilterControllerEvent $event)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2242 次 |
| 最近记录: |