Wie kann ich feststellen, welcher Anforderungstyp in PHP verwendet wurde (GET, POST, PUT oder DELETE)?
PATCH?
$_SERVER['REQUEST_METHOD'] === 'PATCH'
Wie kann ich feststellen, welcher Anforderungstyp in PHP verwendet wurde (GET, POST, PUT oder DELETE)?
PATCH?
$_SERVER['REQUEST_METHOD'] === 'PATCH'
Antworten:
Durch die Nutzung
$_SERVER['REQUEST_METHOD']
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// The request is using the POST method
}
Weitere Informationen finden Sie in der Dokumentation zur Variablen $ _SERVER .
$_GET['var'].
$_POSTund $_GETsind leider etwas benannt. $_GETEnthält Variablen aus der Abfragekomponente der URL, unabhängig von der HTTP-Methode. $_POSTenthält Formularfelder, wenn die Anfrage als gesendet wurde application/x-www-form-urlencoded.
REST in PHP kann ziemlich einfach durchgeführt werden. Erstellen Sie http://example.com/test.php (siehe unten). Verwenden Sie diese Option für REST-Aufrufe, z . B. http://example.com/test.php/testing/123/hello . Dies funktioniert sofort mit Apache und Lighttpd, und es sind keine Umschreiberegeln erforderlich.
<?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;
}
@vor $_SERVER['PATH_INFO']?
PHP Notice: Undefined index: PATH_INFOfalls PATH_INFO nicht vorhanden ist $_SERVER. Ich füge das sofort meiner Trickkiste hinzu! Es ist eine Art zu sagen: "Ich weiß, dass es in diesem Array möglicherweise keinen so benannten Eintrag gibt, und ich bin bereit dafür. Halten Sie einfach die Klappe und tun Sie, was ich Ihnen sage." :) Danke Jungs, sowohl für das Posten dieser Antwort als auch dafür, dass ich meine Aufmerksamkeit auf diesen bestimmten Charakter darin gelenkt habe.
<?php $request = explode("/", substr(@$_SERVER['PATH_INFO'], 1)); $rest = 'rest_'.strtolower($_SERVER['REQUEST_METHOD']); if (function_exists($rest)) call_user_func($rest, $request); ?>
Das Erkennen der HTTP-Methode oder der so genannten HTTP-Methode REQUEST METHODkann mithilfe des folgenden Codeausschnitts erfolgen.
$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
}
Sie können dies auch mit a tun, switchwenn Sie dies der if-elseAnweisung vorziehen .
Wenn eine andere Methode als GEToder POSTin einem HTML-Formular erforderlich ist, wird dies häufig mithilfe eines ausgeblendeten Felds im Formular gelöst.
<!-- 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>
Weitere Informationen zu HTTP-Methoden finden Sie in der folgenden StackOverflow-Frage:
PUT und DELETE des HTTP-Protokolls und ihre Verwendung in PHP
Wir können auch den input_filter verwenden , um die Anforderungsmethode zu erkennen und gleichzeitig Sicherheit durch Eingabesanierung zu gewährleisten.
$request = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);
Da es sich um REST handelt, reicht es nicht aus, nur die Anforderungsmethode vom Server abzurufen. Sie müssen auch RESTful-Routenparameter erhalten. Der Grund für die Trennung von RESTful-Parametern und GET / POST / PUT-Parametern besteht darin, dass eine Ressource zur Identifizierung eine eigene eindeutige URL haben muss.
Hier ist eine Möglichkeit, RESTful-Routen in PHP mit Slim zu implementieren:
https://github.com/codeguy/Slim
$app = new \Slim\Slim();
$app->get('/hello/:name', function ($name) {
echo "Hello, $name";
});
$app->run();
Und konfigurieren Sie den Server entsprechend.
Hier ist ein weiteres Beispiel mit 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');
Sie können die getenvFunktion verwenden und müssen nicht mit einer $_SERVERVariablen arbeiten:
getenv('REQUEST_METHOD');
Mehr Info:
Es ist sehr einfach, benutze einfach $ _SERVER ['REQUEST_METHOD'];
Beispiel:
<?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;
}
?>
$_SERVER['REQUEST_METHOD']selbst angepassten wider . Denken Sie daran, dass die Methode nur eine Zeichenfolge im Anforderungsheader ist und dass es unsere Aufgabe ist, die Richtigkeit zu überprüfen.
$request = new \Zend\Http\PhpEnvironment\Request();
$httpMethod = $request->getMethod();
Auf diese Weise können Sie auch in Zend Framework 2 erreichen. Vielen Dank.
In Core PHP können Sie Folgendes tun:
<?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;
}
?>
Es ist außerdem wichtig zu beachten, dass PHP alle $_GETParameter auffüllt, auch wenn Sie eine ordnungsgemäße Anfrage eines anderen Typs senden.
Methods in oben Antworten sind völlig richtig, aber wenn Sie zu Additionaly überprüfen möchten GETParameter bei der Handhabung POST, DELETE, PUTetc. Anfrage, müssen Sie die Größe überprüfen $_GETArray.
Wenn eine Methode angefordert wurde, hat sie eine array. Also einfach mal reinschauen count().
$m=['GET'=>$_GET,'POST'=>$_POST];
foreach($m as$k=>$v){
echo count($v)?
$k.' was requested.':null;
}
Ich habe diesen Code verwendet. Es sollte funktionieren.
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;
}
Dieser obige Code funktioniert mit REST callsund auch mithtml form
<form method="post">
<input name="_method" type="hidden" value="delete" />
<input type="submit" value="Submit">
</form>
Sie können beliebige Abfragezeichenfolgendaten abrufen, z www.example.com?id=2&name=r
Sie müssen Daten mit $_GET['id']oder abrufen $_REQUEST['id'].
Daten posten bedeutet wie Formular, das <form action='' method='POST'>Sie verwenden müssen $_POSToder $_REQUEST.