Symfony3 api - 无法使用 FOSBundle 获取 React 应用和 return 传递的数据
Symfony3 api - unable to get data passed by react app and return it using FOSBundle
我正在制作简单的 symfony api 和 React 应用程序。我的 React 应用程序将 json 格式的数据发送到 symfony api。但是我无法访问正在发送的数据。
这是我的 React 应用程序组件中的函数 -
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'];
这是我收到的错误
Undefined index: price"
此代码运行良好,我能够轻松获取请求上下文中的数据,但我决定开始使用 FOSBundle,但现在它不起作用。
如您所见,有 var_dump($request)
和 dump($request)
试图查看请求 sent.I 也如您所见,尝试了 returning请求我的反应 api 在那里查看它,但它不起作用,这是我得到的错误 -
Resources are not supported in serialized data
如果这很重要 - 我之前曾尝试 returning new View($data,{some response code})
但是它给出了这个错误 -
Unknown key "request" for annotation "@FOS\RestBundle\Controller\Annotations\View
我不知道这是什么意思。它说 everything.If 我发送普通数组它会说 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-Length: 2 Content-Type: application/json Host: 127.0.0.1:8000 Origin: http://localhost:3000 Referer: http://localhost:3000/ User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Mobile Safari/537.36 X-Php-Ob-Level: 1 [] [] []
我无法以任何其他方式查看请求。
我看过教程建议使用 Symfony FormType 来处理提交,但问题是我没有前端部分,也没有首先创建要提交的表单。这个 symfony API 只是后端我不知道如何将数据从我的反应应用程序发送到 symfony api 如果我要使用 symfony 表单。
有人可以告诉我如何从请求中获取数据以及如何 return 因为 return new View({any data}, {some response code})
给出了 Unknown key {whatever key I have sent}
吗?
[已解决(某种程度上)] - 在创建要传递给 symfony 的数据时 api 结果是出于某种原因我写了 []
而不是 {}
,这导致了没有发送正确值的错误。
然而,这保留了问题的另一部分——如何使用@View。因为每当我尝试 return new View({some data}, {some response code});
它都会抛出一个错误。
我正在制作简单的 symfony api 和 React 应用程序。我的 React 应用程序将 json 格式的数据发送到 symfony api。但是我无法访问正在发送的数据。
这是我的 React 应用程序组件中的函数 -
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'];
这是我收到的错误
Undefined index: price"
此代码运行良好,我能够轻松获取请求上下文中的数据,但我决定开始使用 FOSBundle,但现在它不起作用。
如您所见,有 var_dump($request)
和 dump($request)
试图查看请求 sent.I 也如您所见,尝试了 returning请求我的反应 api 在那里查看它,但它不起作用,这是我得到的错误 -
Resources are not supported in serialized data
如果这很重要 - 我之前曾尝试 returning new View($data,{some response code})
但是它给出了这个错误 -
Unknown key "request" for annotation "@FOS\RestBundle\Controller\Annotations\View
我不知道这是什么意思。它说 everything.If 我发送普通数组它会说 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-Length: 2 Content-Type: application/json Host: 127.0.0.1:8000 Origin: http://localhost:3000 Referer: http://localhost:3000/ User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Mobile Safari/537.36 X-Php-Ob-Level: 1 [] [] []
我无法以任何其他方式查看请求。
我看过教程建议使用 Symfony FormType 来处理提交,但问题是我没有前端部分,也没有首先创建要提交的表单。这个 symfony API 只是后端我不知道如何将数据从我的反应应用程序发送到 symfony api 如果我要使用 symfony 表单。
有人可以告诉我如何从请求中获取数据以及如何 return 因为 return new View({any data}, {some response code})
给出了 Unknown key {whatever key I have sent}
吗?
[已解决(某种程度上)] - 在创建要传递给 symfony 的数据时 api 结果是出于某种原因我写了 []
而不是 {}
,这导致了没有发送正确值的错误。
然而,这保留了问题的另一部分——如何使用@View。因为每当我尝试 return new View({some data}, {some response code});
它都会抛出一个错误。