Обнаружение типа запроса в PHP (GET, POST, PUT или DELETE)
Как я могу определить, какой тип запроса был использован (GET, POST, PUT или DELETE) в PHP?
11 ответов:
С помощью
$_SERVER['REQUEST_METHOD']
пример
if ($_SERVER['REQUEST_METHOD'] === 'POST') { // The request is using the POST method }
для получения более подробной информации см. документация для переменной $_SERVER.
отдых в PHP можно сделать довольно просто. Создать http://example.com/test.php (изложено ниже). Используйте это для вызовов REST, например http://example.com/test.php/testing/123/hello. это работает с Apache и Lighttpd из коробки, и никакие правила перезаписи не нужны.
<?php $method = $_SERVER['REQUEST_METHOD']; $request = explode("/", substr(@$_SERVER['PATH_INFO'], 1)); switch ($method) { case 'PUT': do_something_with_put($request); break; case 'POST': do_something_with_post($request); break; case 'GET': do_something_with_get($request); break; default: handle_error($request); break; }
обнаружение метода HTTP или так называемого
REQUEST METHOD
можно сделать с помощью следующего фрагмента кода.$method = $_SERVER['REQUEST_METHOD'] if ($method == 'POST') { // Method is POST } elseif ($method == 'GET') { // Method is GET } elseif ($method == 'PUT') { // Method is PUT } elseif ($method == 'DELETE') { // Method is DELETE } else { // Method unknown }
вы также можете сделать это с помощью
switch
Если вы предпочитаете это поif-else
заявление.если метод, отличный от
GET
илиPOST
требуется в HTML-форме, это часто решается с помощью скрытого поля в форме.<!-- DELETE method --> <form action='' method='POST'> <input type="hidden" name'_METHOD' value="DELETE"> </form> <!-- PUT method --> <form action='' method='POST'> <input type="hidden" name'_METHOD' value="PUT"> </form>
для получения дополнительной информации о методах HTTP я хотел бы обратиться к следующему StackOverflow вопрос:
поскольку речь идет о REST, просто получить метод запроса с сервера недостаточно. Также необходимо получить параметры маршрута RESTful. Причина разделения параметров RESTful и GET/POST / PUT заключается в том, что ресурс должен иметь свой собственный уникальный URL-адрес для идентификации.
вот один из способов реализации RESTful routes в PHP с помощью Slim:
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');
можно использовать
getenv
функция и не должны работать с$_SERVER
переменной:getenv('REQUEST_METHOD');
Подробнее:
мы также можем использовать input_filter для обнаружения метода запроса, а также обеспечения безопасности через входную санитарию.
$request = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);
Это очень просто просто использовать $_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; } ?>
$request = new \Zend\Http\PhpEnvironment\Request(); $httpMethod = $request->getMethod();
таким образом, вы также можете достичь в Zend framework 2 также. Спасибо.
в core php вы можете сделать так:
<?php $method = $_SERVER['REQUEST_METHOD']; switch ($method) { case 'GET': //Here Handle GET Request echo 'You are using '.$method.' Method'; break; case 'POST': //Here Handle POST Request echo 'You are using '.$method.' Method'; break; case 'PUT': //Here Handle PUT Request echo 'You are using '.$method.' Method'; break; case 'PATCH': //Here Handle PATCH Request echo 'You are using '.$method.' Method'; break; case 'DELETE': //Here Handle DELETE Request echo 'You are using '.$method.' Method'; break; case 'COPY': //Here Handle COPY Request echo 'You are using '.$method.' Method'; break; case 'OPTIONS': //Here Handle OPTIONS Request echo 'You are using '.$method.' Method'; break; case 'LINK': //Here Handle LINK Request echo 'You are using '.$method.' Method'; break; case 'UNLINK': //Here Handle UNLINK Request echo 'You are using '.$method.' Method'; break; case 'PURGE': //Here Handle PURGE Request echo 'You are using '.$method.' Method'; break; case 'LOCK': //Here Handle LOCK Request echo 'You are using '.$method.' Method'; break; case 'UNLOCK': //Here Handle UNLOCK Request echo 'You are using '.$method.' Method'; break; case 'PROPFIND': //Here Handle PROPFIND Request echo 'You are using '.$method.' Method'; break; case 'VIEW': //Here Handle VIEW Request echo 'You are using '.$method.' Method'; break; Default: echo 'You are using '.$method.' Method'; break; } ?>