Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Events Symfony2事件\u侦听器未启动_Events_Symfony_Doctrine Orm - Fatal编程技术网

Events Symfony2事件\u侦听器未启动

Events Symfony2事件\u侦听器未启动,events,symfony,doctrine-orm,Events,Symfony,Doctrine Orm,我使用的是Symfont RC5,我正在尝试启动事件侦听器prePersist 在app/config/config.yml中,我有:- services: recordmanagement: class: FNQITServices\BMBundle\Listener\RecordManagement tags: - { name: doctrine.event_listener, event: prePersist } 我创建了一个类src/F

我使用的是Symfont RC5,我正在尝试启动事件侦听器
prePersist

app/config/config.yml
中,我有:-

services:
   recordmanagement:
      class: FNQITServices\BMBundle\Listener\RecordManagement
      tags:
        - { name: doctrine.event_listener, event: prePersist }
我创建了一个类
src/FNQITServices/BMBundle/Listener/RecordManagement.php
:-

<?php
namespace FNQITServices\BMBundle\Listener;

use Doctrine\ORM\Event\LifecycleEventArgs;
use FNQITServices\BMBundle\Entity\Elections;
use FNQITServices\BMBundle\Entity\People;

class RecordManagement
{
    public function prePersist(LifecycleEventArgs $args)
    {
        `echo "amibeingcalled" > /tmp/test`;

        $entity = $args->getEntity();
        $entityManager = $args->getEntityManager();

        // perhaps you only want to act on some "Product" entity
        if ($entity instanceof Elections) {
            $person = $this->getDoctrine()
                       ->getRepository('FNQITServicesBMBundle:People')
                       ->find(2);

            $entity->setCreator($person);
        }
    }
}
试试看

试试看


也许这不是问题所在,但您使用的是非常旧的symfony版本。可能首先尝试升级到最新的stable(目前为2.0.12)

可能这不是问题所在,但您使用的是非常旧的symfony版本。可能首先尝试升级到最新的stable(目前为2.0.12)

也有同样的问题

只需使用Symfony 2.0.12(当前版本)和sonata进行相同的测试,它似乎不起作用。我现在使用onFlush事件来满足我的需要


似乎SonataOctrineorAdmin没有正确计算变更集,因为每个字段都会更新,所以您必须手动检查。

也有同样的问题

只需使用Symfony 2.0.12(当前版本)和sonata进行相同的测试,它似乎不起作用。我现在使用onFlush事件来满足我的需要


似乎SonataOctrineorAdmin没有正确计算变更集,因为每个字段都会更新,所以您必须手动检查。

我在src/Acme/BMBundle/Resources/config中创建了services.xml,如下所示:-

<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <services>
        <service id="acme_bm.listener" class="ACME\BMBundle\Listener\RecordManagement">
            <argument type="service" id="service_container" />
            <tag name="doctrine.event_listener" event="prePersist" method="prePersist"/>
        </service>
        <service id="acme_bm.listener2" class="ACME\BMBundle\Listener\RecordManagement">
            <argument type="service" id="service_container" />
            <tag name="doctrine.event_listener" event="preUpdate" method="preUpdate"/>
        </service>
    </services>
</container>
<?php
namespace ACME\BMBundle\Listener;

use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Event\PreUpdateEventArgs;
use Symfony\Component\DependencyInjection\ContainerInterface; 

class RecordManagement 
{
    protected $container;

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


    public function prePersist(LifecycleEventArgs $args)
    {
.
.
.
    }
.
.
.
.
}

然后我创建了Listener/RecordManagement.php,如下所示:-

<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <services>
        <service id="acme_bm.listener" class="ACME\BMBundle\Listener\RecordManagement">
            <argument type="service" id="service_container" />
            <tag name="doctrine.event_listener" event="prePersist" method="prePersist"/>
        </service>
        <service id="acme_bm.listener2" class="ACME\BMBundle\Listener\RecordManagement">
            <argument type="service" id="service_container" />
            <tag name="doctrine.event_listener" event="preUpdate" method="preUpdate"/>
        </service>
    </services>
</container>
<?php
namespace ACME\BMBundle\Listener;

use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Event\PreUpdateEventArgs;
use Symfony\Component\DependencyInjection\ContainerInterface; 

class RecordManagement 
{
    protected $container;

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


    public function prePersist(LifecycleEventArgs $args)
    {
.
.
.
    }
.
.
.
.
}

我在src/Acme/BMBundle/Resources/config中创建了services.xml,如下所示:-

<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <services>
        <service id="acme_bm.listener" class="ACME\BMBundle\Listener\RecordManagement">
            <argument type="service" id="service_container" />
            <tag name="doctrine.event_listener" event="prePersist" method="prePersist"/>
        </service>
        <service id="acme_bm.listener2" class="ACME\BMBundle\Listener\RecordManagement">
            <argument type="service" id="service_container" />
            <tag name="doctrine.event_listener" event="preUpdate" method="preUpdate"/>
        </service>
    </services>
</container>
<?php
namespace ACME\BMBundle\Listener;

use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Event\PreUpdateEventArgs;
use Symfony\Component\DependencyInjection\ContainerInterface; 

class RecordManagement 
{
    protected $container;

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


    public function prePersist(LifecycleEventArgs $args)
    {
.
.
.
    }
.
.
.
.
}

然后我创建了Listener/RecordManagement.php,如下所示:-

<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <services>
        <service id="acme_bm.listener" class="ACME\BMBundle\Listener\RecordManagement">
            <argument type="service" id="service_container" />
            <tag name="doctrine.event_listener" event="prePersist" method="prePersist"/>
        </service>
        <service id="acme_bm.listener2" class="ACME\BMBundle\Listener\RecordManagement">
            <argument type="service" id="service_container" />
            <tag name="doctrine.event_listener" event="preUpdate" method="preUpdate"/>
        </service>
    </services>
</container>
<?php
namespace ACME\BMBundle\Listener;

use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Event\PreUpdateEventArgs;
use Symfony\Component\DependencyInjection\ContainerInterface; 

class RecordManagement 
{
    protected $container;

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


    public function prePersist(LifecycleEventArgs $args)
    {
.
.
.
    }
.
.
.
.
}

用sonata admin在2.0.12版中测试它不起作用他是对的,但是预更新被触发了,但是有一个错误的更改在2.0.12版中用sonata admin测试它不起作用他是对的,但是预更新被触发了,但是有一个错误的更改我很确定我试过这样的东西。。。最后,我在src/ACME/BMBundle/Resources/config下创建了services.xml,然后它似乎找到了监听器定义。所以把它放在config.yml是个问题。我肯定我试过这样的方法。。。最后,我在src/ACME/BMBundle/Resources/config下创建了services.xml,然后它似乎找到了监听器定义。所以把它放在config.yml是个问题。你能解释一下你在那里做了什么吗?;)你能解释一下你在那里做了什么吗