在 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 中,有解决方法但仍然会出错。如果我硬编码要在查询中插入的值,插入将完成到我的数据库中,mysql 5.6 顺便说一句。但是当让参数时,是不可能插入的,确实 mysql 给我错误 not null values are allowed,所以查询已处理,但表单未传递要插入的值。
这是一个基本的 insert 端点,我在其中删除了调试 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 变量不是认识到这一点,不允许在 table.
中插入空值
关于如何正确声明 post 路由的任何想法。我刚刚查看了 slim 网站上的一些文档,Rob Allen 的 v3 skeleton 和其他人。
调用 $request->getBody()
正文 returns Psr\Http\Message\StreamInterface
。您可能想改用 $request->getParsedBody()
。
$app->post("/foo", function ($request, $response) {
$data = $request->getParsedBody();
print_r($data);
});
我正在使用 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 中,有解决方法但仍然会出错。如果我硬编码要在查询中插入的值,插入将完成到我的数据库中,mysql 5.6 顺便说一句。但是当让参数时,是不可能插入的,确实 mysql 给我错误 not null values are allowed,所以查询已处理,但表单未传递要插入的值。
这是一个基本的 insert 端点,我在其中删除了调试 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 变量不是认识到这一点,不允许在 table.
中插入空值关于如何正确声明 post 路由的任何想法。我刚刚查看了 slim 网站上的一些文档,Rob Allen 的 v3 skeleton 和其他人。
调用 $request->getBody()
正文 returns Psr\Http\Message\StreamInterface
。您可能想改用 $request->getParsedBody()
。
$app->post("/foo", function ($request, $response) {
$data = $request->getParsedBody();
print_r($data);
});