簡體   English   中英

PHP PUT 方法 Slim 框架

[英]PHP PUT method Slim framework

請問為什么 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()
    

參考文檔

在 web API 中以 JSON 或 XML 格式發送數據非常常見。 開箱即用,PSR-7 實現不支持這些格式,您必須自己解碼 Request 對象的 getBody()。 由於這是一個常見的需求,Slim 4 提供了 BodyParsingMiddleware 來處理這個任務。

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

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

在您的應用程序內部 function。 像往常一樣使用$request->getParsedBody()
例子:

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

結果: Slim 方法 PUT 結果

如果這仍然錯誤,請嘗試將 Slim 4 更新到最新版本,然后重試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM