【发布时间】:2015-10-22 21:21:54
【问题描述】:
我正在使用 Slim 框架版本 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 中,有解决方法,但仍会出现错误。如果我对要插入到查询中的值进行硬编码,那么插入会在我的数据库中完成,顺便说一下 mysql 5.6。但是当让参数时,是不可能插入的,确实 mysql 给了我 not null values 的错误是允许的,所以查询被处理但表单没有传递值要插入。
这是一个基本的插入端点,我在其中删除了调试try and 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 变量未被识别,因此不允许在表中插入空值.
关于如何正确声明发布路线的任何想法。我刚刚查看了 slim 网站上的一些文档,Rob Allen 的 v3 骨架和其他文档。
【问题讨论】: