English 中文(简体)
A. 听从者查阅书状数据库 2
原标题:Access to database in a listener in Symfony 2

We need to access to database info in a listener. We configure the listener in a service.yml The listener is like:

namespace companyMyBundleListener;

use SymfonyComponentHttpKernelEventGetResponseEvent;
use SymfonyComponentHttpKernelHttpKernelInterface;
use SymfonyComponentDependencyInjectionContainerInterface;
use SymfonyComponentSecurityCoreAuthenticationTokenTokenInterface;
use SymfonyComponentHttpFoundationRedirectResponse;
use SymfonyBundleFrameworkBundleControllerController;

class RequestListener
{
    protected $container;

public function __construct(ContainerInterface $container)
{
    $this->container = $container;
}

public function onKernelRequest(GetResponseEvent $event)
{
...

我们怎样才能利用关于争端解决的理论?

我试图从控制员那里延伸,并做到:

        $em = $this->getDoctrine()->getEntityManager(); 

这种做法是好的。

最佳回答

你们只能注入服务集装箱。 第一,改变建筑商,以获得实体管理:

use DoctrineORMEntityManager;

class RequestListener {
    protected $em;
    function __construct(EntityManager $em)
    {
        $this->em = $em;
    }
    //...
}

接下来,你的工作是:

#...
services:
    foo.requestlistener:
        class: %foo.requestlistener.class%
        arguments:
            - @doctrine.orm.entity_manager
问题回答

似乎你把服务集装箱重新注入听众,因此,你可以这样获得理论:

$doctrine = $this->container->get( doctrine );

如果您的使用情况允许你直接使用神职人员

#services.yml
qis.listener.contractBundleStatusListener:
    class: AcmeAppBundleEventListenerMyListener
    tags:
        - { name: doctrine.event_listener, event: postPersist }

请从LiferixEventArgs获得实体经理:

<?php

use DoctrineORMEventLifecycleEventArgs;

class MyListener
{
    public function postPersist(LifecycleEventArgs $args)
    {
        $entity = $args->getEntity();

        if ($entity instanceof Foo) {
            $entityManager = $args->getEntityManager();

            $entityManager->persist($entity);
            $entityManager->flush();
        }
    }
}

各种像样的冰层仍然存在,但你是否试图通过<密码>doctrine服务给你的听众,而不是服务集装箱?

或者,你已经通过服务集装箱,因此它应当简单地称作:
$this->container->get(学说)。 另外,在一段时间前,我曾在挪威难民事务委员会被告知,通过服务集装箱通常被认为是不良做法。 更好地通过你所需要的个人服务。

我不会把商业逻辑带给听众,因为只有倾听事件。 你们如何用理论为听众撰写考试......

我将理论 accessing倒在不同的阶层,然后在听众中把它说出来。

你们应使用依赖性注射,如这种注射。

class eventSubscriber implements EventSubscriberInterface
{
    /**
     * @var EntityManagerInterface
     */
    private $em;


 public function __construct(EntityManagerInterface $em)
    {

        $this->em = $em;
    }
}




相关问题
Zend and static class properties

I m trying to assign a value to a static class property when defining it: namespace Base; abstract class Skeleton { protected static $entityManager = end_Registry::get("EntityManager"); ......

require_once missing doctrine zend framework

I m integrating doctrine with Zend Framework. I ve hit an error thrown from cli. It seems Zend_Application_Bootstrap_Bootstrap does not have a require_once for ...

doctrine: QueryBuilder vs createQuery?

In Doctrine you can create DQL in 2 ways: EntityManager::createQuery: $query = $em->createQuery( SELECT u FROM MyProjectModelUser u WHERE u.id = ?1 ); QueryBuilder: $qb->add( select , u ) ...

热门标签