1074 votes

Détecter le type de requête en PHP (GET, POST, PUT ou DELETE)

Comment puis-je détecter le type de requête utilisé (GET, POST, PUT ou DELETE) en PHP ?

27 votes

N'oubliez pas HEAD =) (ainsi que OPTIONS, TRACE et CONNECT, mais je ne pense pas que PHP les reçoive jamais).

5 votes

Et si PATCH ?

2 votes

PATCH fonctionne également très bien. $_SERVER['REQUEST_METHOD'] === 'PATCH'

12voto

nurettin Points 4083

Comme il s'agit de REST, il ne suffit pas de recevoir la méthode de requête du serveur. Vous devez également recevoir les paramètres de route RESTful. La raison de la séparation des paramètres RESTful et des paramètres GET/POST/PUT est qu'une ressource doit avoir sa propre URL unique pour être identifiée.

Voici une façon d'implémenter des routes RESTful en PHP en utilisant Slim :

https://github.com/codeguy/Slim

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

Et configurez le serveur en conséquence.

Voici un autre exemple utilisant 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');

0 votes

Ce n'est pas ce que l'OP a demandé. De plus, le PO n'a mentionné REST nulle part.

0 votes

@BrunoFerreira voulez-vous que je supprime la réponse parce que le PO n'a pas utilisé spécifiquement le terme REST ?

8voto

Shaan Ansari Points 154

Dans le noyau de php, vous pouvez faire comme ceci :

<?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;
}

?>

7voto

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

De cette façon, vous pouvez également réaliser dans zend framework 2 également. Merci.

0 votes

Vous pouvez faire dans le contrôleur $request = $this->getRequest(). Et ensuite, $request->isPost(). Vérifiez également $request->getMethod().

7voto

Juned Ansari Points 1902

C'est très simple, il suffit d'utiliser $_SERVER['REQUEST_METHOD'] ;

Exemple :

<?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;
}
?>

1 votes

Le cas "DELETE" ne sera jamais rencontré car ce n'est pas un REQUEST_METHOD possible. Les REQUEST_METHODs valides sont 'GET', 'HEAD', 'POST', 'PUT'. Lisez la documentation (indiquée dans de nombreuses réponses sur cette même page) avant de poster une réponse.

1 votes

@Patrick, en fait, le cas "DELETE" sera pris en compte si la méthode de requête est DELETE ; néanmoins, la documentation de PHP ne le mentionne pas. En effet, toute méthode est reflétée dans $_SERVER['REQUEST_METHOD'] même personnalisés. N'oubliez pas que la méthode n'est qu'une chaîne de caractères dans l'en-tête de la requête et que c'est à nous de vérifier qu'elle est correcte.

1 votes

@Patrick DELETE est défini dans la RFC7231 et est pris en charge par tous les principaux navigateurs. tools.ietf.org/html/rfc7231#section-4.3.5 et $_SERVER["REQUEST_METHOD"] est juste une chaîne.

3voto

Karol Sobański Points 289

Il est important de noter que PHP remplit tous les champs de la base de données. $_GET même lorsque vous envoyez une demande appropriée d'un autre type.

Les méthodes indiquées dans les réponses ci-dessus sont tout à fait correctes, mais si vous voulez vérifier en plus que GET tout en traitant les paramètres POST , DELETE , PUT etc., vous devez vérifier la taille de la demande. $_GET le tableau.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X