Comment puis-je détecter le type de requête utilisé (GET, POST, PUT ou DELETE) en PHP ?
Ce n'est pas ce que l'OP a demandé. De plus, le PO n'a mentionné REST nulle part.
Comment puis-je détecter le type de requête utilisé (GET, POST, PUT ou DELETE) en PHP ?
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');
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;
}
?>
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;
}
?>
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.
@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.
@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.
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 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.
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'