Odpowiedzi:
Używając
$_SERVER['REQUEST_METHOD']
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// The request is using the POST method
}
Aby uzyskać więcej informacji, zobacz dokumentację zmiennej $ _SERVER .
$_GET['var'].
$_POSTi $_GETsą niestety nazwane. $_GETzawierają zmienne z komponentu zapytania adresu URL, niezależnie od metody HTTP. $_POSTbędzie zawierać pola formularza, jeśli żądanie zostało wysłane jako application/x-www-form-urlencoded.
REST w PHP można zrobić dość prosto. Utwórz http://example.com/test.php (opisane poniżej). Użyj tego do wywołań REST, np . Http://example.com/test.php/testing/123/hello . Działa to z Apache i Lighttpd po wyjęciu z pudełka i nie są wymagane żadne reguły przepisywania.
<?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;
}
@przodu $_SERVER['PATH_INFO']?
PHP Notice: Undefined index: PATH_INFOna wypadek, gdyby PATH_INFO nie było $_SERVER. Od razu dodaję to do mojej torby sztuczek! Jest to sposób na powiedzenie „Wiem, że w tej tablicy może nie być wpisu o takiej nazwie i jestem na to gotowy, więc po prostu zamknij się i zrób to, co ci powiem”. :) Dzięki chłopaki, zarówno za opublikowanie tej odpowiedzi, jak i za zwrócenie mojej uwagi na tę konkretną postać.
<?php $request = explode("/", substr(@$_SERVER['PATH_INFO'], 1)); $rest = 'rest_'.strtolower($_SERVER['REQUEST_METHOD']); if (function_exists($rest)) call_user_func($rest, $request); ?>
Wykrywanie metody HTTP lub tzw. REQUEST METHODMoże być wykonane przy użyciu następującego fragmentu kodu.
$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
}
Możesz to również zrobić za pomocą a, switchjeśli wolisz to od if-elseinstrukcji.
Jeśli w formularzu HTML wymagana jest metoda inna niż GETlub POST, często jest to rozwiązywane za pomocą ukrytego pola w formularzu.
<!-- 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>
Aby uzyskać więcej informacji dotyczących metod HTTP, chciałbym odnieść się do następującego pytania StackOverflow:
Możemy również użyć filtra_wejściowego do wykrycia metody żądania, zapewniając jednocześnie bezpieczeństwo poprzez kontrolę urządzeń wejściowych.
$request = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);
Ponieważ chodzi o REST, samo pobranie metody żądania z serwera nie wystarczy. Musisz także otrzymać parametry trasy RESTful. Powodem oddzielenia parametrów RESTful i GET / POST / PUT jest to, że zasób musi mieć swój własny unikalny adres URL do identyfikacji.
Oto jeden ze sposobów implementacji tras RESTful w PHP przy użyciu Slim:
https://github.com/codeguy/Slim
$app = new \Slim\Slim();
$app->get('/hello/:name', function ($name) {
echo "Hello, $name";
});
$app->run();
I odpowiednio skonfiguruj serwer.
Oto kolejny przykład użycia 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');
Możesz użyć getenvfunkcji i nie musisz pracować ze $_SERVERzmienną:
getenv('REQUEST_METHOD');
Więcej informacji:
Jest to bardzo proste, wystarczy użyć $ _SERVER ['REQUEST_METHOD'];
Przykład:
<?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'], nawet dostosowana. Pamiętaj, że metoda jest tylko ciągiem w nagłówku żądania i naszym zadaniem jest sprawdzenie jej poprawności.
$request = new \Zend\Http\PhpEnvironment\Request();
$httpMethod = $request->getMethod();
W ten sposób możesz również osiągnąć w Zend Framework 2. Dzięki.
W podstawowym php możesz to zrobić w następujący sposób:
<?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;
}
?>
Warto dodatkowo zauważyć, że PHP zapełni wszystkie $_GET parametry, nawet jeśli wyślesz odpowiednie żądanie innego typu.
Metody powyższych odpowiedzi są całkowicie poprawne, jednak jeśli chcesz dodatkowo odprawy dla GETparametrów podczas obsługi POST, DELETE, PUTitp wniosek, trzeba sprawdzić rozmiar $_GETtablicy.
Gdy zażądano metody, będzie miała ona array. Więc po prostu sprawdź za pomocą count().
$m=['GET'=>$_GET,'POST'=>$_POST];
foreach($m as$k=>$v){
echo count($v)?
$k.' was requested.':null;
}
Użyłem tego kodu. To powinno działać.
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;
}
Powyższy kod będzie działał z, REST callsa także będzie działałhtml form
<form method="post">
<input name="_method" type="hidden" value="delete" />
<input type="submit" value="Submit">
</form>
Możesz uzyskać dowolne dane ciągu zapytania, tj www.example.com?id=2&name=r
Musisz uzyskać dane za pomocą $_GET['id']lub $_REQUEST['id'].
Prześlij dane oznacza, <form action='' method='POST'>że musisz użyć formularza $_POSTlub $_REQUEST.