我正在使用Slim Framework Version 3设置Restful API。我已经使用了V2,它运行良好。但是,需要在V3中设置此新API。从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 给了我错误 not null values 是允许的,所以查询被处理但是表单没有传递值插入。
这是一个基本的插入端点,我在其中删除了调试 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变量未被识别,因此不允许在表中插入空值
有关如何正确宣布邮政路线的任何想法。我刚刚在瘦身网站上看过一些文档,Rob Allen的v3骨架和其他文档。
答案 0 :(得分:3)
致电$request->getBody()
正文回复Psr\Http\Message\StreamInterface
。您可能希望改为使用$request->getParsedBody()
。
$app->post("/foo", function ($request, $response) {
$data = $request->getParsedBody();
print_r($data);
});