Hoe kan ik detecteren welk verzoektype is gebruikt (GET, POST, PUT of DELETE) in PHP?
Antwoord 1, autoriteit 100%
Door
. te gebruiken
$_SERVER['REQUEST_METHOD']
Voorbeeld
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// The request is using the POST method
}
Zie voor meer details de documentatie voor de $_SERVER variabele.
Antwoord 2, autoriteit 16%
REST in PHP kan vrij eenvoudig worden gedaan. Maak http://example.com/test.php(hieronder beschreven). Gebruik dit voor REST-aanroepen, b.v. http://example.com/test.php/testing/123/hello. Dit werkt standaard met Apache en Lighttpd en er zijn geen herschrijfregels nodig.
<?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;
}
Antwoord 3, autoriteit 2%
Het detecteren van de HTTP-methode of de zogenaamde REQUEST METHOD
kan worden gedaan met behulp van het volgende codefragment.
$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
}
Je zou het ook kunnen doen met een switch
als je dit verkiest boven het if-else
statement.
Als een andere methode dan GET
of POST
vereist is in een HTML-formulier, wordt dit vaak opgelost door een verborgen veld in het formulier te gebruiken.
<!-- 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>
Voor meer informatie over HTTP-methoden wil ik verwijzen naar de volgende StackOverflow-vraag:
PUT en DELETE van het HTTP-protocol en hun gebruik in PHP
Antwoord 4
U kunt de functie getenv
gebruiken en hoeft niet te werken met een variabele $_SERVER
:
getenv('REQUEST_METHOD');
Meer info:
http://php.net/manual/en/function.getenv.php
Antwoord 5
We kunnen ook de input_filtergebruiken om de verzoekmethode te detecteren terwijl biedt ook beveiliging door middel van sanitaire voorzieningen.
$request = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);
Antwoord 6
Aangezien dit over REST gaat, is het niet voldoende om de aanvraagmethode van de server te krijgen. U moet ook RESTful-routeparameters ontvangen. De reden voor het scheiden van RESTful-parameters en GET/POST/PUT-parameters is dat een resource zijn eigen unieke URL moet hebben voor identificatie.
Hier is een manier om RESTful-routes in PHP te implementeren met Slim:
https://github.com/codeguy/Slim
$app = new \Slim\Slim();
$app->get('/hello/:name', function ($name) {
echo "Hello, $name";
});
$app->run();
En configureer de server dienovereenkomstig.
Hier is nog een voorbeeld waarbij AltoRouter wordt gebruikt:
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');
Antwoord 7
$request = new \Zend\Http\PhpEnvironment\Request();
$httpMethod = $request->getMethod();
Op deze manier kun je ook in zend framework 2 bereiken.
Bedankt.
Antwoord 8
Het is heel eenvoudig, gebruik gewoon $_SERVER[‘REQUEST_METHOD’];
Voorbeeld:
<?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;
}
?>
Antwoord 9
In core php kun je dit als volgt doen:
<?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;
}
?>
Antwoord 10
Het is bovendien waardevol om op te merken dat PHP alle $_GET
parameters zal invullen, zelfs als je een correct verzoek van een ander type verzendt.
Methoden in bovenstaande antwoorden zijn volledig correct, maar als u extra wilt controleren op GET
parameters tijdens het verwerken van POST
, DELETE
, PUT
, etc. verzoek, moet u de grootte van de $_GET
array controleren.