将JSON对象发布到Symfony 2

gre*_*reg 69 php ajax json symfony

我正在使用Symfony 2开发一个项目,我已经构建了一个bundle来处理我的所有数据库服务,它们传递JSON数据.

我的问题/问题:

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

  • 我希望能够使用一个服务包来处理来自AJAX调用的数据或正常的Symfony表单.目前我正在提交提交的Symfony表单,然后使用JSON_ENCODE获取数据,我只是无法解决如何将数据发布到我期望请求数据的服务控制器.

总结一下:

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

  • 我想使用Request/Response在控制器之间传递JSON对象

如果我说这一切都错了,请随时告诉我!

ric*_*age 134

如果要在控制器中检索已在请求正文中作为标准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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • `php:// input`是一次性只读.一旦您阅读了内容,除非您传递该数据,否则无法再次阅读.使用Symfony2 Request对象可确保您在需要时可以在请求期间再次获取数据,而无需传递例如`$ JSON`变量. (18认同)
  • 一个小错字答案.该函数需要request参数:public function yourAction(Request $ request) (2认同)
  • @whistlergreg没有probs!:-)通过参数传递请求对象是可选的; 您应该能够将其从容器中取出并按照上面的代码从容器中取出,或者将其传入.请参阅[此处](http://symfony.com/doc/current/book/controller.html#a- simple-controller)和[here](http://symfony.com/doc/current/book/controller.html#the-request-as-a-controller-argument)用于不同的变体. (2认同)

Far*_*mov 9

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

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));
}
Run Code Online (Sandbox Code Playgroud)

我使用这种方法如下所示

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