В моем случае у меня был подписчик на событие, который вставлял строки в базу данных SQLite без Entity Manager. Это привело к ситуации, когда прослушиватель событий пакета FOSElastica не обнаружил изменений. Чтобы проиндексировать эти строки в ElasticSearch, я расширил подписчика:
public function __construct(
TokenStorage $securityTokenStorage,
EntityManager $entityManager,
// These lines
ObjectPersisterInterface $postPersister,
IndexableInterface $indexable,
array $config
){
$this->securityTokenStorage = $securityTokenStorage;
$this->audit = $entityManager;
// These lines
$this->objectPersister = $postPersister;
$this->indexable = $indexable;
$this->config = $config;
parent::__construct($postPersister, $indexable, $config);
}
public function onFlush(...)
{
// ....
//* Insert audit in ElasticSearch
$audit = $this->audit->getRepository('AuditBundle:AuditLog')->findLast();
if ($this->objectPersister->handlesObject($audit)) {
if ($this->isObjectIndexable($audit)) {
$this->objectPersister->insertOne($audit);
}
}
// ....
}
/**
* @param object $object
* @return bool
*/
private function isObjectIndexable($object)
{
return $this->indexable->isObjectIndexable(
self::AUDIT_INDEX,
self::AUDIT_TYPE_NAME,
$object
);
}