我怎么能检测到哪个请求类型被使用(GET, POST, PUT或删除)在PHP?
当前回答
博士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']。
其他回答
您可以获得任何查询字符串数据,例如www.example.com?id=2&name=r
您必须使用$_GET['id']或$_REQUEST['id']获取数据。
Post数据意味着像form <form action= " method=' Post '>你必须使用$_POST或$_REQUEST。
因为这是关于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');
这是非常简单的使用$_SERVER['REQUEST_METHOD'];
例子:
<?php
$method = $_SERVER['REQUEST_METHOD'];
switch ($method) {
case 'GET':
//Here Handle GET Request
break;
case 'POST':
//Here Handle POST Request
break;
case 'DELETE':
//Here Handle DELETE Request
break;
case 'PUT':
//Here Handle PUT Request
break;
}
?>
当一个方法被请求时,它将有一个数组。因此,只需使用count()进行检查。
$m=['GET'=>$_GET,'POST'=>$_POST];
foreach($m as$k=>$v){
echo count($v)?
$k.' was requested.':null;
}
3 v4l.org/u51te
你可以使用getenv函数,而不必使用$_SERVER变量:
getenv('REQUEST_METHOD');
更多信息:
http://php.net/manual/en/function.getenv.php
推荐文章
- PHP有代码混淆器吗?
- 有没有办法在python中做HTTP PUT
- 跨源请求头(CORS)与PHP头
- PHP sprintf转义%
- 我能在服务器端应用程序(PHP、Ruby、Python等)上读取URL的哈希部分吗?
- 如何看到PHP加载的扩展?
- 如何使用Laravel和Eloquent查询两个日期之间?
- 从Laravel 5中的另一个控制器访问控制器方法
- 使用类型提示时不能传递空参数
- 什么是http头“X-XSS-Protection”?
- PHP是空时为空?
- 什么是自动装填;你如何使用spl_autoload, __autoload_register ?
- 在nodejs http中body在哪里。得到回应?
- 将查询字符串解析为数组
- 在PHP中::(双冒号)和->(箭头)之间的区别是什么?