首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FOSRestBundle形式

FOSRestBundle形式
EN

Stack Overflow用户
提问于 2015-04-26 16:58:23
回答 2查看 7.1K关注 0票数 4

我正在尝试构建symfony2 rest,但我正在与FOSRestBundle进行斗争。

一开始,我可以使用"@View()“注释,因为它总是说我的模板丢失了,无论我使用什么配置选项,我都会得到相同的错误,然后在我的路由yml中添加了”缺省值:{ _format: json }“,然后突然声明工作正常。

代码语言:javascript
复制
v1:
    resource: "@AppBundle/Controller/"
    defaults: { _format: json }
    type:     annotation
    prefix:   /v1

但是现在我在表单上遇到了问题,我创建了一个表单类和一个服务,并设置了一个简单的控制器方法:

代码语言:javascript
复制
/**
 * 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所示。

但不是这样的:

代码语言:javascript
复制
{
    "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."
                ]
            }
        }
    }
}

我得到:

代码语言:javascript
复制
{
    "children": {
        "code": [],
        "name": [],
        "description": []
    }
}

这里发生了什么事?是我的设置出了什么问题还是我遗漏了什么?顺便说一下,我在实体中设置了表单验证。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-26 17:34:50

代码语言:javascript
复制
{
"children": {
    "code": [],
    "name": [],
    "description": []
  }
}

这意味着表单是有效的,并且在验证中没有任何错误。因此,这是正确的响应,因为您说您的测试用例已经得到了有效的表单。

如果在表单声明中将字段定义为“必需”,并且具有验证约束NotBlank ( http://symfony.com/doc/current/reference/constraints/NotBlank.html ),则下面将显示响应片段。

代码语言:javascript
复制
"errors": [
                "This value should not be blank."
]

编辑:

经过评论讨论后:将"handleRequest“替换为"submit”helped.

票数 3
EN

Stack Overflow用户

发布于 2017-06-08 22:40:01

我知道这已被标记为已解决,但最近我遇到了相同的问题,即FOSRestBundle没有以在

http://symfony.com/doc/current/bundles/FOSRestBundle/2-the-view-layer.html#forms-and-views

我发现,当使用序列化程序时,实际问题与在AppKernel中注册包的顺序有关。必须确保按以下顺序加载:

代码语言:javascript
复制
new JMS\SerializerBundle\JMSSerializerBundle(),
new FOS\RestBundle\FOSRestBundle()

一旦我这样做,当表单验证失败时,我就开始看到与文档一致的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29880610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档