Symfony3 api - 无法通过react app传递数据并使用FOSBundle返回它

时间:2017-07-31 09:09:01

标签: php json symfony fosrestbundle

我正在制作简单的symfony api并对应用做出反应。我的反应应用程序以json格式将数据发送到symfony api。但是,我无法访问正在发送的数据。

以下是我的反应应用程序中组件中的功能 -

  createProduct (event) {
    event.preventDefault()
    if(this.state.name.length === 0 ){
      this.error = 'Name cannot be empty'
    }else if(this.state.price === 0){
      this.error = 'Price cannot be 0'
    }else if(this.state.price < 0 ){
      this.error = 'Price cannot be negative'
    }else {
      let data = []
      data['name'] = this.state.name
      data['price'] = this.state.price
      ProductActions.addProduct(data)
    }
  }

这是实际的addProduct操作 -

 addProduct (data) {
    console.log('made it')
    let request = {
      method: 'POST',
      url: 'http://127.0.0.1:8000/product/post',
      data: JSON.stringify(data),
      contentType: 'application/json'
    }
    $.ajax(request)
      .done(data => this.addProductSuccess(data))
      .fail(err => this.addProductFail(err))
  }

现在Symfony api - 这是照顾创造新产品的行动

/**
     * Creates a new product entity.
     * @Rest\Post("/post")
     */
    function newAction(Request $request ) {

        $body = $request->getContent();
        $body = json_decode($body,true);
        var_dump($body);
        dump($body);
        $logger = $this->get('logger');
        $logger->error($request);
        //$productPrice = $body['price'];
        //$product = new Product($productName,$productPrice);
        //$em = $this->getDoctrine()->getManager();
        //$em->persist($product);
        //$em->flush();
        //$data['data'] = $product;
        $data['body'] = $body;
        return $data;
    }

正如您所看到的,大部分代码都在评论中。原因是它不起作用。在这行代码之后,所有内容都会中断

$productPrice = $body['price'];

这是我收到的错误

  

未定义的索引:价格&#34;

此代码工作正常,我能够轻松地在请求的上下文中获取数据,但我决定开始使用FOSBundle,现在它无法正常工作。

正如您所看到的那样,var_dump($request)以及dump($request)尝试查看正在发送的请求。我也可以看到尝试将请求返回到我的react api以查看它但它不起作用,这是我得到的错误 -

  

序列化数据不支持资源

如果重要的话 - 我之前尝试过返回new View($data,{some response code})但它会给出这个错误 -

  

未知密钥&#34;请求&#34;注释&#34; @FOS \ RestBundle \ Controller \ Annotations \ View

我不知道这意味着什么。它说明了这一切。如果我发送普通数组,它会说Unknown key '0'而我没有@View这样的注释,说实话我不知道如何使用它们。

在尝试查看请求后,我使用了$logger。这是实际发送的内容

  

POST / product / post HTTP / 1.1 Accept: / Accept-Encoding:gzip,deflate,br Accept-Language:en-US,en; q = 0.8 Connection:keep-alive Content-长度:2内容类型:application / json主机:127.0.0.1:8000来源:http://localhost:3000推荐人:http://localhost:3000/用户代理:Mozilla / 5.0(Linux; Android 6.0; Nexus 5 Build / MRA58N) AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 59.0.3071.115 Mobile Safari / 537.36 X-Php-Ob-Level:1 [] [] []

我无法以任何其他方式查看请求。

我见过教程,建议使用Symfony FormType来处理提交,但问题是我没有前端部分,并且首先没有创建表单。这个symfony API只是后端我不知道如果我要使用symfony表单,如何将反应应用程序中的数据发送到symfony api。

有人可以告诉我如何从请求中获取数据以及如何在return new View({any data}, {some response code})给出Unknown key {whatever key I have sent}后返回该数据吗?

1 个答案:

答案 0 :(得分:0)

[已解决(种类)] - 创建要传递给symfony api的数据时,我发现由于某种原因我写了[]而不是{}这导致了错误,没有发送正确的值。

然而,这保留了问题的另一部分 - 如何使用@View。因为每当我尝试返回new View({some data}, {some response code});时,它都会抛出错误。