在Slim Framework 3.0版本中创建POST路由的正确方法


Proper way to create POST routes in Slim Framework Version 3.0

我正在使用Slim Framework Version 3设置一个Restful API。我用过V2,它工作得很好。但是,这个新API需要在V3中设置。从V2到V3有一些变化。
我使用GET方法没有问题。然而,POST方法id给我的问题,我敢肯定是在一个必须请求表单内容的方式。

这是它在V2中的工作方式:

$app = Slim::getInstance();
$request=$app->request->getBody();
$form_data = json_decode($request);
$stmt->bindParam("id_itme", $form_data->id_itme);

这样我就可以捕获表单元素,然后将它们传递给查询。

在版本3中,有解决方法,但仍然得到错误。如果我硬编码要插入查询内的值,插入到我的DB, mysql 5.6顺便说一下。但是当允许参数时,是不可能插入的,确实mysql给我的错误不是空值是允许的,所以查询被处理,但表单没有传递要插入的值。

这是一个基本的插入结束点,其中我删除了调试try和catch,只是为了使其工作。

$app->post('/add', function ($request, $response, $args) {
$sql = "INSERT INTO dim.dim_city   (id_dim_country, city, city_status) VALUES ( :id_country, :city, '1');";
$db = getDB();
$stmt = $db->prepare($sql);
$body = $request->getBody();
$form_data =$body;
$city=$form_data['city'];
$id_country=$form_data['id_country'];
$stmt->bindParam(':id_country', $id_country, PDO::PARAM_INT);
$stmt->bindParam(':city', $city);
$stmt->execute();
$id_city= $db->lastInsertId();
$db = null;
echo json_encode($id_city);
});

它给了我一个500错误消息,或者如我之前所说的,一个mysql错误,其中的问题是id_country变量不被识别,因此,不允许在表中插入null。

关于如何正确声明post路由有什么想法吗?我刚刚检查了slim网站上的一些文档,Rob Allen的v3骨架和其他。

调用$request->getBody()主体返回Psr'Http'Message'StreamInterface。你可能想用$request->getParsedBody()代替。

$app->post("/foo", function ($request, $response) {
    $data = $request->getParsedBody();
    print_r($data);
});