我使用FPNTagBudle
标记我的文档,使用FOSElasticaBundle
将其编入弹性搜索索引。
要FPNTagBudle
将标记加载到对象中,您需要使用loadTagging
方法,如下所示:
$tagManager = $this->get('fpn_tag.tag_manager');
$tagManager->loadTagging($object);
当从表单编辑对象时,我加载了标签,所以一切正常,当保存对象时,索引正确构建。问题是当我运行fos:elastica:populate
命令来填充所有对象时,标签被跳过,因为标签没有被加载。
我试图挂钩PRE_TRANSFORM
事件并在那里加载标签,但随后它与表单混淆,因为第二次调用loadTagging
会擦除表单中添加的新标签。
是否可以在PRE_TRANSFORM
挂钩中识别这是populate命令,这样我才能加载标记?或许我的问题更为根本?
答案 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',
);
}
}