我怎么能检测到哪个请求类型被使用(GET, POST, PUT或删除)在PHP?


当前回答

通过使用

$_SERVER['REQUEST_METHOD']

例子

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
     // The request is using the POST method
}

要了解更多细节,请参阅$_SERVER变量的文档。

其他回答

当一个方法被请求时,它将有一个数组。因此,只需使用count()进行检查。

$m=['GET'=>$_GET,'POST'=>$_POST];
foreach($m as$k=>$v){
    echo count($v)?
    $k.' was requested.':null;
}

3 v4l.org/u51te

值得注意的是,即使您发送了其他类型的请求,PHP也会填充所有的$_GET参数。

上述回复中的方法是完全正确的,但是如果你想在处理POST, DELETE, PUT等请求时额外检查GET参数,你需要检查$_GET数组的大小。

$request = new \Zend\Http\PhpEnvironment\Request();
$httpMethod = $request->getMethod();

通过这种方式,您也可以在zend框架2中实现。 谢谢。

博士TL;

true的“原生源”是$_SERVER全局变量。请求方法 保存在“REQUEST_METHOD”键下。

检查$_SERVER数组

$ _SERVER(“REQUEST_METHOD”)

PHP方法

但是您可以使用许多变通方法来获得方法。像filter_input: filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);

填词 或者使用外部库,比如:

Symfony \ HttpFoundation \ \组件请求 \ Zend \ \ PhpEnvironment \ Http请求

结论

但最简单的方法是使用:$_SERVER['REQUEST_METHOD']。

因为这是关于REST的,所以仅仅从服务器获取请求方法是不够的。您还需要接收RESTful路由参数。分离RESTful参数和GET/POST/PUT参数的原因是资源需要有自己的唯一URL用于标识。

下面是使用Slim在PHP中实现RESTful路由的一种方法:

https://github.com/codeguy/Slim

$app = new \Slim\Slim();
$app->get('/hello/:name', function ($name) {
  echo "Hello, $name";
});
$app->run();

并相应地配置服务器。

下面是另一个使用AltoRouter的例子:

https://github.com/dannyvankooten/AltoRouter

$router = new AltoRouter();
$router->setBasePath('/AltoRouter'); // (optional) the subdir AltoRouter lives in

// mapping routes
$router->map('GET|POST','/', 'home#index', 'home');
$router->map('GET','/users', array('c' => 'UserController', 'a' => 'ListAction'));
$router->map('GET','/users/[i:id]', 'users#show', 'users_show');
$router->map('POST','/users/[i:id]/[delete|update:action]', 'usersController#doAction', 'users_do');