Symfony2 - 如何使用带有Doctrine MongoDB ODM的postLoad事件监听器来更改文档?

Mat*_*uta 2 php doctrine mongodb symfony

我有一个文档描述了我的应用程序中的模型,我想在文档加载后更改字段值,我发现这样做的方法是使用事件监听器.我在config/services.yml中添加了一个新的监听器(postLoad监听器),我无法弄清楚如何获取文件并在发送之前对其进行更改.

帮助将不胜感激.:)

这是我添加到config/service.yml(在服务下)

core.listener:
  class: Matan\CoreBundle\EventListener\DocumentListener
  tags:
    - { name: doctrine_mongodb.odm.event_listener, event: postLoad }
Run Code Online (Sandbox Code Playgroud)

DocumentListener.php

namespace Matan\CoreBundle\EventListener;

use Matan\CoreBundle\Document\App;

class DocumentListener
{
    public function postLoad()
    {
        //I Want to change it here
    }
}
Run Code Online (Sandbox Code Playgroud)

Nic*_*ich 5

解:

您应该指定应在服务定义中调用的侦听器方法:

- { name: doctrine_mongodb.odm.event_listener, event: postLoad, method: onPostLoad }
Run Code Online (Sandbox Code Playgroud)

现在,您可以从传递给方法的EventArgs中获取刚刚加载的文档onPostLoad.

检查它是否与您要更改的模型匹配,然后执行更改.

use Doctrine\ODM\MongoDB\Event\LifecycleEventArgs;
use Acme\Your\Document\MyDocument;

public function onPostLoad(LifecycleEventArgs $eventArgs)
{   
    $document = $eventArgs->getDocument();

    if !($document instanceof MyDocument) {
       return;
    }

    // ... your code here
    // $document->setLoaded(new \Date('now'));
}
Run Code Online (Sandbox Code Playgroud)