JMS Serializer在控制器操作之前拦截验证

时间:2016-05-24 09:48:59

标签: php symfony fosrestbundle

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

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

    // ...
}

我没有将contraintvalidation注入控制器,而是希望在执行控制器操作之前返回400和错误。

如何拦截FOSREST paramconverter?

1 个答案:

答案 0 :(得分:1)

fos_rest.request_body转换器只是在请求主体中设置值(如果它们存在于实体中)。您可以创建自己的ParamConverter类来处理请求中Post的创建。

在这个类中,您可以抛出异常,这些异常会在到达控制器之前停止流程。

以下是关于ParamConverters的Symfony文档:

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