Php Symfony2-如何使用MongoDB ODM的后加载事件侦听器更改文档?
我的应用程序中有一个描述模型的文档, 我想在加载文档后更改字段值,我发现这样做的方法是使用事件侦听器。 我在我的config/services.yml中添加了一个新的监听器(postLoad listener),我不知道如何获取文档并在发送之前对其进行更改 如蒙帮助,将不胜感激。:) 这是我添加到config/service.yml(服务下)的内容 DocumentListener.phpPhp Symfony2-如何使用MongoDB ODM的后加载事件侦听器更改文档?,php,mongodb,symfony,doctrine,Php,Mongodb,Symfony,Doctrine,我的应用程序中有一个描述模型的文档, 我想在加载文档后更改字段值,我发现这样做的方法是使用事件侦听器。 我在我的config/services.yml中添加了一个新的监听器(postLoad listener),我不知道如何获取文档并在发送之前对其进行更改 如蒙帮助,将不胜感激。:) 这是我添加到config/service.yml(服务下)的内容 DocumentListener.php namespace Matan\CoreBundle\EventListener; use Matan\
namespace Matan\CoreBundle\EventListener;
use Matan\CoreBundle\Document\App;
class DocumentListener
{
public function postLoad()
{
//I Want to change it here
}
}
解决方案: 您应该指定应在服务定义中调用的侦听器方法:
- { name: doctrine_mongodb.odm.event_listener, event: postLoad, method: onPostLoad }
现在,您可以从传递到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'));
}
请添加一些代码:)我用代码更新了我的原始邮件,谢谢!现在你到底想改变什么。。。基于什么条件?我想检查正在加载的文档是否为App类型,如果是,我想使用他自己的getter更改文档,问题是如何从postLoad方法内部访问文档。如果有任何不清楚的地方,请查看我的答案并报告。这正是我需要的,非常感谢!与Symfony2事件监听器不同,条令的事件管理器希望每个监听器和订阅者都有一个与观察到的事件对应的方法名。因此,前面提到的标记没有方法属性。
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'));
}