我想在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并将其注入控制器。
答案 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