Symfony REST DTO验证并在模型中注入paramconverter

时间:2016-05-10 14:18:26

标签: json rest symfony

我想在json rest api中为post动作创建一个请求过滤器,它接受请求的主体并填充DTO,验证它并将其注入控制器动作,如paramconverter。

我该怎么做?

我有这样的DTO:

class ExampleDTO
{
    /**
     * @var string
     *
     * @NotNull(message="El campo nombre es requerido")
     * @Type(name="string", message="El campo nombre tiene un tipo incorrecto")
     */
    private $nombre;

    /**
     * @return string
     */
    public function getNombre()
    {
        return $this->nombre;
    }

    /**
     * @param string $nombre
     */
    public function setNombre($nombre)
    {
        $this->nombre = $nombre;
    }


}

现在我想将json转换为此DTO并将其注入控制器。

1 个答案:

答案 0 :(得分:2)

实际上ParamConverter使用路由参数(如“/myapp.com/post/{id}”中的{id},而不是请求体)。

如果您使用FOSRestBundle,则可以使用Request Body Converter Listener(http://symfony.com/doc/current/bundles/FOSRestBundle/request_body_converter_listener.html)。

来自FOSRestBundle文档的简单示例:

/**
 * @ParamConverter("dto", converter="fos_rest.request_body", options={"validator"={"groups"={"foo", "bar"}}})
 */
public function putAction(ExampleDTO $exampleDTO, ConstraintViolationListInterface $validationErrors)
{
    if (count($validationErrors) > 0) {
        // Handle validation errors
    }

    // ...
}

此外,您应该以这种方式调整此方法的应用程序配置:

# app/config/config.yml
sensio_framework_extra:
    request: { converters: true }


# app/config/config.yml
fos_rest:
    body_converter:
        enabled: true