FOS elastica bundle 4. * - автоматический индекс сущности не работает

В настоящее время я пытаюсь разрешить пакету FOS Elastica автоматически обновлять индекс при появлении новых записей со следующими настройками:

fos_elastica:
clients:
    default: { host: localhost, port: 9200 }
indexes:
    audit:
        finder: ~
        types:
            audit_log:
                persistence:
                    driver: orm
                    model: AuditBundle\Entity\AuditLog
                    # Problem occurs here. This should trigger automatic inserts, updates and deletes
                    listener: ~
                    provider: ~
                    finder: ~
                    model_to_elastica_transformer:
                        service: app.audit_transformer

Однако моя нестандартная модель для эластичного трансформатора не срабатывает. Кто-нибудь знает, как это исправить?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
722
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В моем случае у меня был подписчик на событие, который вводил строки в базу данных 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
    );
}

Другие вопросы по теме