Bagaimana saya bisa mendeteksi tipe permintaan mana yang digunakan (GET, POST, PUT atau DELETE) di PHP?
PATCH
?
$_SERVER['REQUEST_METHOD'] === 'PATCH'
Bagaimana saya bisa mendeteksi tipe permintaan mana yang digunakan (GET, POST, PUT atau DELETE) di PHP?
PATCH
?
$_SERVER['REQUEST_METHOD'] === 'PATCH'
Jawaban:
Dengan menggunakan
$_SERVER['REQUEST_METHOD']
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// The request is using the POST method
}
Untuk detail lebih lanjut silakan lihat dokumentasi untuk variabel $ _SERVER .
$_GET['var']
.
$_POST
dan $_GET
sayangnya diberi nama. $_GET
mengandung variabel dari komponen permintaan URL, terlepas dari metode HTTP. $_POST
akan berisi bidang formulir jika permintaan dikirim sebagai application/x-www-form-urlencoded
.
REST di PHP bisa dilakukan dengan sangat sederhana. Buat http://example.com/test.php (diuraikan di bawah). Gunakan ini untuk panggilan REST, mis . Http://example.com/test.php/testing/123/hello . Ini berfungsi dengan Apache dan Lighttpd di luar kotak, dan tidak ada aturan penulisan ulang yang diperlukan.
<?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;
}
@
di depan $_SERVER['PATH_INFO']
?
PHP Notice: Undefined index: PATH_INFO
jika PATH_INFO tidak ada $_SERVER
. Saya menambahkan ini ke tas trik saya segera! Ini adalah cara untuk mengatakan "Saya tahu mungkin tidak ada entri yang bernama seperti itu dalam array ini, dan saya siap untuk itu, jadi diam dan lakukan apa yang saya katakan kepada Anda". :) Terima kasih teman-teman, baik untuk memposting jawaban ini dan untuk membawa perhatian saya pada karakter tertentu di dalamnya.
<?php $request = explode("/", substr(@$_SERVER['PATH_INFO'], 1)); $rest = 'rest_'.strtolower($_SERVER['REQUEST_METHOD']); if (function_exists($rest)) call_user_func($rest, $request); ?>
Mendeteksi metode HTTP atau yang disebut REQUEST METHOD
bisa dilakukan dengan menggunakan potongan kode berikut.
$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
}
Anda juga bisa melakukannya menggunakan switch
jika Anda lebih suka ini daripada if-else
pernyataan.
Jika metode selain GET
atau POST
diperlukan dalam formulir HTML, ini sering diselesaikan dengan menggunakan bidang tersembunyi di formulir.
<!-- 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>
Untuk informasi lebih lanjut mengenai metode HTTP, saya ingin merujuk pada pertanyaan StackOverflow berikut:
Kami juga dapat menggunakan input_filter untuk mendeteksi metode permintaan sambil juga menyediakan keamanan melalui sanitasi input.
$request = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);
Karena ini tentang REST, hanya mendapatkan metode permintaan dari server tidak cukup. Anda juga perlu menerima parameter rute yang tenang. Alasan untuk memisahkan parameter RESTful dan parameter GET / POST / PUT adalah bahwa sumber daya perlu memiliki URL unik untuk identifikasi.
Inilah salah satu cara menerapkan rute RESTful di PHP menggunakan Slim:
https://github.com/codeguy/Slim
$app = new \Slim\Slim();
$app->get('/hello/:name', function ($name) {
echo "Hello, $name";
});
$app->run();
Dan konfigurasikan server sesuai.
Berikut contoh lain menggunakan 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');
Anda bisa menggunakan getenv
fungsi dan tidak harus bekerja dengan $_SERVER
variabel:
getenv('REQUEST_METHOD');
Info lebih lanjut:
Sangat Sederhana, cukup gunakan $ _SERVER ['REQUEST_METHOD'];
Contoh:
<?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']
, bahkan yang disesuaikan. Ingat bahwa metode ini hanya string di header permintaan dan itu adalah tugas kami untuk memeriksa kebenarannya.
$request = new \Zend\Http\PhpEnvironment\Request();
$httpMethod = $request->getMethod();
Dengan cara ini Anda juga bisa mencapainya di zend framework 2 juga. Terima kasih.
Di core php Anda bisa melakukan ini:
<?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;
}
?>
Penting juga untuk dicatat, bahwa PHP akan mengisi semua $_GET
parameter bahkan ketika Anda mengirim permintaan yang tepat dari jenis lainnya.
Metode di balasan atas adalah sepenuhnya benar, namun jika Anda ingin additionaly cek untuk GET
parameter sambil menangani POST
, DELETE
, PUT
, dll permintaan, Anda perlu memeriksa ukuran $_GET
array yang.
Ketika suatu metode diminta, ia akan memiliki array
. Jadi cukup periksa count()
.
$m=['GET'=>$_GET,'POST'=>$_POST];
foreach($m as$k=>$v){
echo count($v)?
$k.' was requested.':null;
}
Saya menggunakan kode ini. Itu harus bekerja.
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;
}
Kode di atas ini akan bekerja dengan REST calls
dan juga akan bekerja denganhtml form
<form method="post">
<input name="_method" type="hidden" value="delete" />
<input type="submit" value="Submit">
</form>
Anda bisa mendapatkan data string kueri apa pun www.example.com?id=2&name=r
Anda harus mendapatkan data menggunakan $_GET['id']
atau$_REQUEST['id']
.
Mengirim data berarti formulir <form action='' method='POST'>
yang harus Anda gunakan $_POST
atau $_REQUEST
.