JMS 序列化程序在控制器操作之前拦截验证

JMS Serializer intercept validation before controller action

我想在控制器操作之前使用参数转换器验证反序列化的实体。

/**
 * @ParamConverter("post", converter="fos_rest.request_body")
 */
public function putPostAction(Post $post, ConstraintViolationListInterface $validationErrors)
{
    if (count($validationErrors) > 0) {
        // Handle validation errors
    }

    // ...
}

我想在执行控制器操作之前 return 400 和错误,而不是将 contraintvalidation 注入控制器。

如何拦截 FOSREST 参数转换器?

fos_rest.request_body 转换器仅设置来自请求正文的值(如果它们存在于实体中)。您可以创建自己的 ParamConverter class 来处理根据请求创建 Post

在此 class 中,您可以抛出异常,在到达控制器之前停止流程。

这是关于 ParamConverters 的 Symfony 文档:

http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html#creating-a-converter