Slim v3 PUT 方法并检索 POST 数据

Slim v3 PUT method and retrieve POST data

我在使用 PUT 方法的数据库中添加了更新电子邮件的路径

$app->put('/notifications/{email}', 'add_email_address');

它的功能如下:

function add_email_address($request, $response, $args) {

  $email = $args['email'];
  $addon_email = $request->getParam('addon_email', null);

  echo "ADD/UPDATE $email with $addon_email";

}

UPDATE 以某种方式使用表单输入测试 PUT 方法 post addon_email = test@null.com $addon_email 的检索值为空;

任何提示我做错了什么?

您应该使用 $request->getParams() 来获取所有 POST/PUT 参数的数组,或者您可以使用 $reqeuest->getParam('key', 'defaultValue'),其中 'key' 是参数名称'defaultValue' 是...好吧,默认值以防参数丢失。

所以,

function add_email_address($request, $response, $args) {

  $email = $args['email'];
  $addon_email = $app->request->getParam('addon_email', null);

  // some code....

  return $response->withJson("ADD/UPDATE $email with $email");

}

编辑

我们都忘记了您应该 return 响应对象。 )

因为add_email_address是路由回调,所以应该returnPsr\Http\Message\ResponseInterface响应。

我已经通过更改

让它工作了

$addon_email = $app->request->getParam('addon_email', null);

$allPostPutVars = $request->getParsedBody();
$addon_email = $allPostPutVars['addon_email'];

看起来 getParam 仅适用于 GET 方法。此外,内容类型必须设置为 x-www-form-urlencoded