将 JSON 对象发布到 Symfony 2

2022-08-30 08:47:10

我正在使用Symfony 2进行一个项目,我已经构建了一个捆绑包来处理我所有向前传递JSON数据的数据库服务。

我的问题/问题:

  • 是否可以直接发布 JSON 对象?目前,我正在通过为对象命名来欺骗我的ajax调用的正常表单帖子,如果我不给它一个名称,我似乎无法从Symfony请求对象获取数据json={"key":"value"}$JSON = $request->request->get('json');

  • 我希望能够使用一个服务包来处理来自AJAX调用或普通Symfony形式的数据。目前,我正在采用提交的Symfony表单,然后使用JSON_ENCODE获取数据,我只是无法弄清楚如何将数据发布到我的服务控制器,该控制器正在等待请求数据。

总结一下:

  • 我希望Symfony接受JSON post对象而不是表单。

  • 我想使用请求/响应在控制器之间传递 JSON 对象

如果我做错了,请随时告诉我!


答案 1

如果要在控制器中检索在请求正文中作为标准 JSON 发送的数据,可以执行类似于以下内容的操作:

public function yourAction()
{
    $params = array();
    $content = $this->get("request")->getContent();
    if (!empty($content))
    {
        $params = json_decode($content, true); // 2nd param to get as array
    }
}

现在将是一个充满 JSON 数据的数组。删除调用中的参数值以获取对象。$paramstruejson_decode()stdClass


答案 2

我编写了将内容作为数组获取的方法

protected function getContentAsArray(Request $request){
    $content = $request->getContent();

    if(empty($content)){
        throw new BadRequestHttpException("Content is empty");
    }

    if(!Validator::isValidJsonString($content)){
        throw new BadRequestHttpException("Content is not a valid json");
    }

    return new ArrayCollection(json_decode($content, true));
}

我使用此方法,如下所示

$content = $this->getContentAsArray($request);
$category = new Category();
$category->setTitle($content->get('title'));
$category->setMetaTitle($content->get('meta_title'));

推荐