如何创建从 Elastic 结果到 Doctrine 实体的自定义转换器
How to create a custom transformer from Elastic result to Doctrine entity
tl;博士
如何在 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 }
然后创建实际服务 class,在其中扩展原始转换器并覆盖 transform
方法。
最后你告诉 FosElastica 使用这个转换器而不是原来的转换器:
fos_elastica:
indexes:
app:
types:
company:
mappings:
...
persistence:
...
elastica_to_model_transformer:
service: myapp.elastica_to_model.transformer.company
tl;博士
如何在 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 }
然后创建实际服务 class,在其中扩展原始转换器并覆盖 transform
方法。
最后你告诉 FosElastica 使用这个转换器而不是原来的转换器:
fos_elastica:
indexes:
app:
types:
company:
mappings:
...
persistence:
...
elastica_to_model_transformer:
service: myapp.elastica_to_model.transformer.company