FOSElasticaBundle和FPNTagBudle索引标记

时间:2018-01-14 14:25:59

标签: symfony tags foselasticabundle

我使用FPNTagBudle标记我的文档,使用FOSElasticaBundle将其编入弹性搜索索引。

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

$tagManager = $this->get('fpn_tag.tag_manager');
$tagManager->loadTagging($object);

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

我试图挂钩PRE_TRANSFORM事件并在那里加载标签,但随后它与表单混淆,因为第二次调用loadTagging会擦除表单中添加的新标签。

是否可以在PRE_TRANSFORM挂钩中识别这是populate命令,这样我才能加载标记?或许我的问题更为根本?

1 个答案:

答案 0 :(得分:0)

我决定使用<div text-center align-items-center> <buttonion-button block class="button-design " text-center>Sign In </button> </div> 事件并区分它是来自使用PRE_TRANSFORM的表单还是填充命令。以下整个解决方案:

<强>订户

php_sapi_name()

<强>服务

<?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',
        );
    }
}