我正在尝试构建symfony2 rest,但我正在与FOSRestBundle进行斗争。
一开始,我可以使用"@View()“注释,因为它总是说我的模板丢失了,无论我使用什么配置选项,我都会得到相同的错误,然后在我的路由yml中添加了”缺省值:{ _format: json }“,然后突然声明工作正常。
v1:
resource: "@AppBundle/Controller/"
defaults: { _format: json }
type: annotation
prefix: /v1但是现在我在表单上遇到了问题,我创建了一个表单类和一个服务,并设置了一个简单的控制器方法:
/**
* Creates a new Order entity.
*
* @Rest\Post("/products", name="products_create")
* @Rest\View()
* @param Request $request
* @return Product|array
*/
public function createAction(Request $request)
{
$product = new Product();
$form = $this->createForm('product', $product);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($product);
$em->flush();
return $product;
}
return $form;
}如果表单无效(在我的测试用例中),我希望得到类似的响应,如文档:http://symfony.com/doc/current/bundles/FOSRestBundle/2-the-view-layer.html#forms-and-views所示。
但不是这样的:
{
"code": 400,
"message": "Validation Failed";
"errors": {
"children": {
"code": {
"errors": [
"This value should not be blank."
]
},
"name": {
"errors": [
"This value should not be blank."
]
},
"description": {
"errors": [
"This value should not be blank."
]
}
}
}
}我得到:
{
"children": {
"code": [],
"name": [],
"description": []
}
}这里发生了什么事?是我的设置出了什么问题还是我遗漏了什么?顺便说一下,我在实体中设置了表单验证。
发布于 2015-04-26 17:34:50
{
"children": {
"code": [],
"name": [],
"description": []
}
}这意味着表单是有效的,并且在验证中没有任何错误。因此,这是正确的响应,因为您说您的测试用例已经得到了有效的表单。
如果在表单声明中将字段定义为“必需”,并且具有验证约束NotBlank ( http://symfony.com/doc/current/reference/constraints/NotBlank.html ),则下面将显示响应片段。
"errors": [
"This value should not be blank."
]编辑:
经过评论讨论后:将"handleRequest“替换为"submit”helped.
发布于 2017-06-08 22:40:01
我知道这已被标记为已解决,但最近我遇到了相同的问题,即FOSRestBundle没有以在
http://symfony.com/doc/current/bundles/FOSRestBundle/2-the-view-layer.html#forms-and-views
我发现,当使用序列化程序时,实际问题与在AppKernel中注册包的顺序有关。必须确保按以下顺序加载:
new JMS\SerializerBundle\JMSSerializerBundle(),
new FOS\RestBundle\FOSRestBundle()一旦我这样做,当表单验证失败时,我就开始看到与文档一致的结果。
https://stackoverflow.com/questions/29880610
复制相似问题