Comment savoir quel type de requête a été utilisé (GET, POST, PUT ou DELETE) en PHP?
En utilisant
$_SERVER['REQUEST_METHOD']
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// The request is using the POST method
}
Pour plus de détails, veuillez consulter la documentation concernant la variable $ _SERVER .
REST dans PHP peut être fait assez simplement. Créez http://example.com/test.php (décrit ci-dessous). Utilisez ceci pour les appels REST, par exemple. http://example.com/test.php/testing/123/hello . Cela fonctionne avec Apache et Lighttpd prêts à l'emploi, et aucune règle de réécriture n'est nécessaire.
<?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;
}
La détection de la méthode HTTP ou de ce que l'on appelle REQUEST METHOD
peut être effectuée à l'aide de l'extrait de code suivant.
$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
}
Vous pouvez également le faire en utilisant un switch
si vous préférez ceci par rapport à l'instruction if-else
.
Si une méthode autre que GET
ou POST
est requise dans un formulaire HTML, cela est souvent résolu en utilisant un champ masqué dans le formulaire.
<!-- 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>
Pour plus d'informations sur les méthodes HTTP, je souhaite faire référence à la question StackOverflow suivante:
Les protocoles PUT et DELETE du protocole HTTP et leur utilisation dans PHP
Comme il s'agit de REST, obtenir la méthode de requête du serveur ne suffit pas. 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 disposer de sa propre URL unique pour son identification.
Voici un moyen d'implémenter des routes RESTful dans 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');
Vous pouvez utiliser la fonction getenv
sans devoir travailler avec une variable $_SERVER
:
getenv('REQUEST_METHOD');
Plus d'informations:
Nous pouvons également utiliser le fichier input_filter pour détecter la méthode de la requête tout en assurant la sécurité grâce au nettoyage des entrées.
$request = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);
C'est très simple, utilisez $ _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;
}
?>
$request = new \Zend\Http\PhpEnvironment\Request();
$httpMethod = $request->getMethod();
De cette façon, vous pouvez également réaliser dans zend framework 2 aussi ..
En php de base, 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;
}
?>
J'ai utilisé ce code. Ça devrait marcher.
function get_request_method() {
$request_method = strtolower($_SERVER['REQUEST_METHOD']);
if($request_method != 'get' && $request_method != 'post') {
return $request_method;
}
if($request_method == 'post' && isset($_POST['_method'])) {
return strtolower($_POST['_method']);
}
return $request_method;
}
Ce code ci-dessus fonctionnera avec REST calls
et fonctionnera également avec html form
<form method="post">
<input name="_method" type="hidden" value="delete" />
<input type="submit" value="Submit">
</form>
Quand une méthode a été demandée, elle aura une array
. Il suffit donc de vérifier avec count()
.
$m=['GET'=>$_GET,'POST'=>$_POST];
foreach($m as$k=>$v){
echo count($v)?
$k.' was requested.':null;
}