nikic/FastRoute post请求参数访问

我正在尝试使用 FastRoute 实现简单的 POST 请求。我按照给定的示例成功实现了 GET 类型请求。在实现 POST 请求时,我无法访问随请求发送的参数。


$dispatcher = FastRoute\simpleDispatcher(function(FastRoute\RouteCollector $r) {

  $r->addRoute('POST', '/login', 'Test/put');

  $r->addRoute('GET', '/users/{id:\d+}', 'Test/put');

});


$httpMethod = $_SERVER['REQUEST_METHOD'];

$uri = $_SERVER['REQUEST_URI'];


if (false !== $pos = strpos($uri, '?')) {

 $uri = substr($uri, 0, $pos);

}


$uri = rawurldecode($uri);


$routeInfo = $dispatcher->dispatch($httpMethod, $uri);

switch ($routeInfo[0]) {

 case FastRoute\Dispatcher::FOUND:

  $handler = $routeInfo[1];

  $vars = $routeInfo[2];

  list($class, $method) = explode("/", $handler, 2);

  call_user_func_array(array(new $class, $method), $vars);

  break;

}


class Test {

 public function put() {

  return "Check";

 }

}

我试图检查$_POST,但是,它是空的。


精慕HU
浏览 93回答 1
1回答

摇曳的蔷薇

在搜索了大量有关 nikic/FastRoute post 请求的信息后,对代码进行了以下更改。$_POST = json_decode(file_get_contents('php://input' ),true);$dispatcher = FastRoute\simpleDispatcher(function(FastRoute\RouteCollector $r) {  $r->addRoute('POST', '/login', 'Test/put');  $r->addRoute('GET', '/users/{id:\d+}', 'Test/put');});$httpMethod = $_SERVER['REQUEST_METHOD'];$uri = $_SERVER['REQUEST_URI'];if (false !== $pos = strpos($uri, '?')) { $uri = substr($uri, 0, $pos);}$uri = rawurldecode($uri);$httpMethod = $_SERVER['REQUEST_METHOD'];$routeInfo = $dispatcher->dispatch($httpMethod, $uri);switch ($routeInfo[0]) { case FastRoute\Dispatcher::FOUND:   $handler = $routeInfo[1];   $vars = ($httpMethod == 'POST')? $_POST : $routeInfo[2];;   list($class, $method) = explode("/", $handler, 2);   call_user_func_array(array(new $class, $method), $vars);   break;}class Test {  public function put() {    return "Check";  }}
打开App,查看更多内容
随时随地看视频慕课网APP