首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FOSElasticaBundle和FPNTagBudle索引标记

FOSElasticaBundle和FPNTagBudle索引标记
EN

Stack Overflow用户
提问于 2018-01-14 22:25:59
回答 1查看 71关注 0票数 0

我使用FPNTagBudle标记我的文档,使用FOSElasticaBundle将它们索引到elasticsearch索引中。

使用FPNTagBudle将标签加载到对象中,您需要使用loadTagging方法,如下所示:

代码语言:javascript
复制
$tagManager = $this->get('fpn_tag.tag_manager');
$tagManager->loadTagging($object);

当从表单编辑对象时,我加载了标签,所以一切都正常工作,当对象被保存时,索引被正确地建立起来。问题是,当我运行fos:elastica:populate命令来填充所有对象时,标记被跳过了,因为那时没有加载标记。

我试图在那里连接到PRE_TRANSFORM事件和loadTagging,但是它搞乱了表单,因为第二次调用loadTagging会擦除从表单添加的新标记。

有没有可能在PRE_TRANSFORM钩子中识别出这是填充命令,这样我才能loadTagging?或者,也许我的问题更根本?

EN

回答 1

Stack Overflow用户

发布于 2018-02-04 01:47:15

我决定使用PRE_TRANSFORM事件,并用php_sapi_name()来区分它是来自表单还是填充命令。下面是整个解决方案:

订户

代码语言:javascript
复制
<?php

namespace AppBundle\EventSubscriber;

use FOS\ElasticaBundle\Event\TransformEvent;
use FPN\TagBundle\Entity\TagManager;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * Class ElasticaTransformSubscriber
 * @package AppBundle\EventSubscriber
 */
class ElasticaTransformSubscriber implements EventSubscriberInterface
{

    /** @var TagManager */
    private $tagManager;

    /**
     * ElasticaTransformSubscriber constructor.
     * @param $tagManager
     */
    public function __construct(TagManager $tagManager)
    {
        $this->tagManager = $tagManager;
    }

    /**
     * @param TransformEvent $event
     */
    public function preTransformOperations(TransformEvent $event)
    {
        if (php_sapi_name() === 'cli') {
            $object = $event->getObject();
            $this->tagManager->loadTagging($object);
        }
    }

    /**
     * @return array
     */
    public static function getSubscribedEvents()
    {
        return array(
            TransformEvent::PRE_TRANSFORM => 'preTransformOperations',
        );
    }
}

服务

代码语言:javascript
复制
app.subscriber.object_transformer_elastica:
    class: AppBundle\EventSubscriber\ElasticaTransformSubscriber
    arguments: ["@fpn_tag.tag_manager"]
    tags:
        - { name: kernel.event_subscriber }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48250536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档