symfony - 如何创建从 Elastic 结果到 Doctrine 实体的自定义转换器

标签 symfony elasticsearch foselasticabundle

tl;dr

如何在 FosElasticaBundle 中将基础转换器从 Elastic 结果扩展/覆盖到 Doctrine 实体?

详情

我想更改 FOS\ElasticaBundle\Doctrine\AbstractElasticaToModelTransformer 中的 transform 方法,以便我可以向检索到的实体添加自定义属性。

我通过破解该方法进行了测试,它完全符合我的要求。

在不破解它的情况下覆盖/扩展该方法的最佳解决方案是什么?

最佳答案

您可以覆盖转换器并通过创建新服务来定义您自己的转换器。完整的故事可以在http://obtao.com/blog/2014/05/advanced-indexing-with-elasticsearch-foselasticabundle/阅读。

简而言之:首先您定义这样的服务(在我的例子中,我只索引一个特定的实体):

myapp.elastica_to_model.transformer.company:
    class: AppBundle\Transformers\ElasticaToCompanyTransformer
    arguments: [ @doctrine, "AppBundle\Entity\Company" ]
    calls:
        - [ setPropertyAccessor, ["@fos_elastica.property_accessor"] ]
    tags:
        - { name: fos_elastica.elastica_to_model_transformer.app.company }

然后创建实际的服务类,在其中扩展原始转换器并覆盖 transform 方法。

最后你告诉 FosElastica 使用这个转换器而不是原来的转换器:

fos_elastica:
    indexes:
        app:
            types:
                company:
                    mappings:
                        ...
                    persistence:
                        ...
                        elastica_to_model_transformer:
                            service: myapp.elastica_to_model.transformer.company

关于symfony - 如何创建从 Elastic 结果到 Doctrine 实体的自定义转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32460632/

相关文章:

symfony - 如何处理 twig View 和 bootstrap 3 行/列?

sql - Symfony 2 : Generate SQL from specific entity

ajax - 在 Symfony2 中测试 AJAX/XMLHttpRequest 页面的功能

elasticsearch - Logstash没有在ElasticSearch中插入记录

symfony - 如何处理 symfony 2 路由中的问号

elasticsearch - 无法通过远程连接连接到 kibana

elasticsearch - 如何在ElasticSearch中过滤热门词汇聚合?

elasticsearch - Elasticsearch-如何在一个字符串中搜索多个单词

symfony - Elasticsearch PHP最长前缀匹配

symfony - elasticsearch索引已删除