首页 > 解决方案 > 使用 curl 访问 Symfony 4 控制器中的 POST 值

问题描述

早上好。

我目前正在尝试从 Symfony 4 控制器中的 curl 请求访问 POST 数据。

我的控制器如下所示:

class OrderController extends AbstractController  
{  
/**  
 * @Route("/order", name="order")  
 */  
public function index(Request $request)  
{                                                      
    var_dump($request->request->all());die;       

    return $this->json([                                    
        'message' => 'Welcome to your new controller!',     
        'path' => 'src/Controller/OrderController.php',     
    ]);                                                     
    }                                                           
}

当我php bin\console server:run在浏览器中运行并访问本地主机/订单时,我得到了它应该得到的页面。如果我用

curl http://127.0.0.1:8000/order

我也得到了正确的结果。但是当我尝试在 curl 请求上发送一个 json 正文时,在上面的控制器上我只得到一个空数组。

我的请求如下所示:

curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d '
{'json':{
"id": "1",
"customer-id": "1",
"items": [
  {
    "product-id": "B102",
    "quantity": "10", 
    "unit-price": "4.99",
    "total": "49.90"
  }
],
"total": "49.90"
}}' http://127.0.0.1:8000/order

知道我在做什么错吗?

标签: phpsymfonycurl

解决方案


Request 对象只会通过 $request->request 方法返回表单参数。如果要访问 JSON 正文,则需要使用 $request->getContent()。如果该内容是 json,您的代码将如下所示:

$json = json_decode($request->getContent(), true);
var_dump($json['json']);

推荐阅读