首页 文章

在Symfony 2中使用自定义ParamConverter进行POST请求

提问于
浏览
1

我正在使用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转换器的用途 .

我很感激任何建议 .

1 回答

  • 1

    好吧,我意识到我哪里出错了 . 这是一个不从我的自定义paramConverter apply 方法返回 true 的简单情况 . 如果确实返回true,则不会应用doctrine param转换器 .

相关问题