【问题标题】:PHP PUT method Slim frameworkPHP PUT 方法 Slim 框架
【发布时间】:2021-11-30 19:13:57
【问题描述】:

请问为什么 put 只包含一个空字段?当帖子正常工作时?

$app->post('/books', function (Request $request, Response $response, $args){
    $book = Books::fromResultSet($request->getParsedBody());
    if($book->valid())
        return $response->withStatus(400);

    $book->insert();
    return $response->withStatus(201);
})->add($securityMiddleware);

$app->put('/books/{id}', function (Request $request, Response $response, $args){
    $book = Books::fromResultSet($request->getParsedBody());
    print_r($book);

    /*if($book->valid())
        return $response->withStatus(400);

    $book->update();
    return $response->withStatus(201);*/
})->add($securityMiddleware);

列出 print_r ($ request-> getParsedBody()) 后的错误

C:\MAMP\htdocs\vendor\slim\slim\Slim\Handlers\Strategies\RequestResponse.php(43): {closure}(Object(GuzzleHttp\Psr7\ServerRequest), Object(GuzzleHttp\Psr7\Response), Array)
    #1 C:\MAMP\htdocs\vendor\slim\slim\Slim\Routing\Route.php(384): Slim\Handlers\Strategies\RequestResponse->__invoke(Object(Closure), Object(GuzzleHttp\Psr7\ServerRequest), Object(GuzzleHttp\Psr7\Response), Array)
    #2 C:\MAMP\htdocs\public\index.php(27): Slim\Routing\Route->handle(Object(GuzzleHttp\Psr7\ServerRequest))
    #3 C:\MAMP\htdocs\vendor\slim\slim\Slim\MiddlewareDispatcher.php(313): {closure}(Object(GuzzleHttp\Psr7\ServerRequest), Object(Slim\Routing\Route))
    #4 C:\MAMP\htdocs\vendor\slim\slim\Slim\MiddlewareDispatcher.php(81): class@anonymous->handle(Object(GuzzleHttp\Psr7\ServerRequest))
    #5 C:\MAMP\htdocs\vendor\slim\slim\Slim\MiddlewareDispatcher.php(81): Slim\MiddlewareDispatcher->handle(Object(GuzzleHttp\Psr7\ServerRequest))
    #6 C:\MAMP\htdocs\vendor\slim\slim\Slim\Routing\Route.php(341): Slim\MiddlewareDispatcher->handle(Object(GuzzleHttp\Psr7\ServerRequest))
    #7 C:\MAMP\htdocs\vendor\slim\slim\Slim\Routing\RouteRunner.php(84): Slim\Routing\Route->run(Object(GuzzleHttp\Psr7\ServerRequest))
    #8 C:\MAMP\htdocs\vendor\slim\slim\Slim\Middleware\RoutingMiddleware.php(59): Slim\Routing\RouteRunner->handle(Object(GuzzleHttp\Psr7\ServerRequest))
    #9 C:\MAMP\htdocs\vendor\slim\slim\Slim\MiddlewareDispatcher.php(147): Slim\Middleware\RoutingMiddleware->process(Object(GuzzleHttp\Psr7\ServerRequest), Object(Slim\Routing\RouteRunner))
    #10 C:\MAMP\htdocs\vendor\slim\slim\Slim\Middleware\ErrorMiddleware.php(107): class@anonymous->handle(Object(GuzzleHttp\Psr7\ServerRequest))
    #11 C:\MAMP\htdocs\vendor\slim\slim\Slim\MiddlewareDispatcher.php(147): Slim\Middleware\ErrorMiddleware->process(Object(GuzzleHttp\Psr7\ServerRequest), Object(class@anonymous))
    #12 C:\MAMP\htdocs\vendor\slim\slim\Slim\MiddlewareDispatcher.php(81): class@anonymous->handle(Object(GuzzleHttp\Psr7\ServerRequest))
    #13 C:\MAMP\htdocs\vendor\slim\slim\Slim\App.php(215): Slim\MiddlewareDispatcher->handle(Object(GuzzleHttp\Psr7\ServerRequest))
    #14 C:\MAMP\htdocs\vendor\slim\slim\Slim\App.php(199): Slim\App->handle(Object(GuzzleHttp\Psr7\ServerRequest))
    #15 C:\MAMP\htdocs\public\index.php(85): Slim\App->run()
    

【问题讨论】:

  • stackoverflow.com/questions/23761425/… 会回答这个问题吗?
  • 切换到:“x-www-form-urlencoded”对我没有帮助
  • 嗨,你能打印 $request->getParsedBody() 的结果吗?从请求中返回的任何值?
  • 你可以在图片上设置
  • 图片显然是print_r($book); 的结果 建议发布print_r($request->getParsedBody()); 的结果,因为我们不知道Books::fromResultSet(...) 做了什么。但是,我怀疑问题出在您没有向我们展示的代码中 - 大概它需要在某处查找正确的书?将文本作为文本发布也更有帮助,而不是我们必须眯着眼看的文本图片。

标签: php api slim


【解决方案1】:

请参考document

在 Web API 中以 JSON 或 XML 格式发送数据非常常见。开箱即用,PSR-7 实现不支持这些格式,您必须自己解码 Request 对象的 getBody()。由于这是一个常见的需求,Slim 4 提供了 BodyParsingMiddleware 来处理这个任务。

在您的$app = AppFactory::create(); 之后,添加此代码。

// Parse json, form data and xml
$app->addBodyParsingMiddleware();

在您的应用功能中。照常使用$request->getParsedBody()
示例:

$app->any('/books/{id}', function (Request $request, Response $response, $args){
    print_r($request->getParsedBody());
    return $response;
});

结果:

如果仍然出错,请尝试将 Slim 4 更新到最新版本并重试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    • 2013-06-12
    • 2011-10-12
    相关资源
    最近更新 更多