gpt4 book ai didi

symfony - 如何扩展 FOSRestBundle RequestBodyParamConverter?

转载 作者:行者123 更新时间:2023-12-04 07:16:29 24 4
gpt4 key购买 nike

我是 Symfony (5.3) 的新手,想扩展 RequestBodyParamConverter (FOSRestBundle 3.0.5) 创建一个 REST api。使用 @ParamConverter带有 RequestBodyParamConverter 的注释工作正常。但是,我想创建一个自定义转换器,它的工作与 RequestBodyParamConverter 完全相同。加上一点额外的工作。
我的第一个猜测是简单地扩展 RequestBodyParamConverter并在 @ParamConverter 中提供我的自定义子类注解。但是,RequestBodyParamConverter定义为 final因此无法延长...
注入(inject) RequestBodyParamConverter/fos_rest.request_body_converter进入自定义转换器类(参见下面的示例)也会失败,因为找不到服务。我认为这是因为它被定义为 private ?
所以,我最后的想法是创建一个 RequestBodyParamConverter在我的自定义转换器类中。虽然这可行,但我不确定这是否是解决此问题的正确方法。这边RequestBodyParamConverter被创建了两次。这当然没什么特别的,但这是 Symfony 解决这个问题的方法还是有其他解决方案?
示例:
注入(inject) RequestBodyParamConverter在自定义转换器类中

class MyParamConverter implements ParamConverterInterface {
protected $parentConverter;
public function __construct(ParamConverterInterface $parentConverter) {
$this->parentConverter = $parentConverter;
}

public function apply(Request $request, ParamConverter $configuration): bool {
doExtraWork();
return $this->parentConverter->apply(...);
}
}

// config/services.yaml
My\Project\MyParamConverter:
tags:
- { name: request.param_converter, converter: my_converter.request_body }
arguments:
# both fails since service is not found
$parentConverter: '@FOS\RestBundle\Request\RequestBodyParamConverter'

# OR

$parentConverter: '@fos_rest.request_body_converter'
创建 RequestBodyParamConverter在自定义转换器类中
class MyParamConverter implements ParamConverterInterface {
protected $parentConverter;
public function __construct(...parameters necessary to create converter...) {
$this->parentConverter = new RequestBodyParamConverter(...);
}

...
}

最佳答案

Symfony 提供了一种访问 decorate a registered service 的方法
要使用它,您需要在容器中注册的 FOS 服务 ID。
要获得它,您可以使用此命令

symfony console debug:container --tag=request.param_converter
检索 Service ID您要覆盖的服务。
然后你可以配置你的服务来装饰 FOS 之一
My\Project\MyParamConverter:
decorates: 'TheIdOf_FOS_ParamConverterService'
arguments: [ '@My\Project\MyParamConverter.inner' ] # <-- this is the instance of fos service
也许您需要添加 tags对于这个声明,我不确定。
如果您遇到错误,请告诉我。

关于symfony - 如何扩展 FOSRestBundle RequestBodyParamConverter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68727506/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com