我正在使用Symfony 2.6和FOS Rest Bundle。
用于PATCH,DELETE和GET请求的Param转换器可以很好地工作并减少控制器操作中的代码。但是对于POST请求我有问题。每次都会调用默认的\Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter
。这会导致异常:
无法猜测如何从请求信息中获取Doctrine实例。
我查看了\Sensio\Bundle\FrameworkExtraBundle\EventListener\ParamConverterListener
并看到它始终包含onKernelController
方法中的Doctrine参数转换器。从文档中可以看出,除非您将其设置为off,否则doctrine param转换器会自动应用于所有类型提示的控制器操作:
sensio_framework_extra:
request:
converters: true
auto_convert: false
我找到了一种防止这种情况的hacky方法。要应用的param转换器数组将通过控制器方法中的类型提示参数的名称(symfony通过反射获得)进行索引。如果我只是将我的param转换器命名为与此类型提示相同,则默认的doctrine参数转换器将不会添加到param转换器列表中。例如:
...
* @ParamConverter(
* "MyEntity",
* class="Foo\Bar\MyEntity",
* converter="my_custom_converter"
* )
*
* @param MyEntity $myEntity
* @return MyEntity
*/
public function postMyEntityAction(MyEntity $myEntity)
{
我正在写这个问题,因为我正在深入研究代码,我甚至不确定我的问题是什么。我想它应用了多个param转换器是否合乎逻辑?"或者还想知道是否可以关闭某些操作的param转换器。也许我的逻辑在这里是完全错误的,这不是param转换器的用途。
我很感激任何建议。
答案 0 :(得分:1)
好吧,我意识到我哪里出错了。这是一个不从我的自定义paramConverter true
方法返回apply
的简单情况。如果确实返回true,那么将不会应用doctrine param转换器。