Answers:
භාවිතා කිරීම මගින්
$_SERVER['REQUEST_METHOD']
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// The request is using the POST method
}
වැඩි විස්තර සඳහා කරුණාකර $ _SERVER විචල්යය සඳහා වන ප්රලේඛනය බලන්න .
$_GET['var']
.
$_POST
හා $_GET
තරමක් අවාසනාවකට නම් කර ඇත. $_GET
HTTP ක්රමය නොසලකා URL හි විමසුම් සංරචකයේ විචල්යයන් අඩංගු වේ. $_POST
ඉල්ලීම යවා ඇත්නම් පෝරම ක්ෂේත්ර අඩංගු වේ application/x-www-form-urlencoded
.
PHP හි REST ඉතා සරල ලෙස කළ හැකිය. Http://example.com/test.php සාදන්න (පහත දක්වා ඇත). REST ඇමතුම් සඳහා මෙය භාවිතා කරන්න, උදා: http://example.com/test.php/testing/123/hello . මෙය Apache සහ Lighttpd සමඟ පිටතින් ක්රියාත්මක වන අතර නැවත ලිවීමේ නීති අවශ්ය නොවේ.
<?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;
}
@
ක දී ඉදිරිපිට $_SERVER['PATH_INFO']
?
PHP Notice: Undefined index: PATH_INFO
PATH_INFO නොමැති විට එය ඉවත් වේ $_SERVER
. මම මේ මොහොතේම මගේ උපක්රම මල්ලට එකතු කරමි! එය "මෙම අරාව තුළ ඒ ආකාරයෙන් නම් කිරීමක් නොතිබිය හැකි බව මම දනිමි. මම ඒ සඳහා සුදානම්ය, එබැවින් කට වසාගෙන මම ඔබට කියන දේ කරන්න". :) ස්තූතියි යාලුවනේ, මේ පිළිතුර පළ කිරීම ගැනත් එහි ඇති එම චරිතය කෙරෙහි මගේ අවධානය යොමු කිරීම ගැනත්.
<?php $request = explode("/", substr(@$_SERVER['PATH_INFO'], 1)); $rest = 'rest_'.strtolower($_SERVER['REQUEST_METHOD']); if (function_exists($rest)) call_user_func($rest, $request); ?>
REQUEST METHOD
පහත දැක්වෙන කේත ස්නිපටය භාවිතයෙන් HTTP ක්රමය හෝ ඊනියා හඳුනා ගැනීම කළ හැකිය.
$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
}
ප්රකාශයට switch
වඩා ඔබ මෙය කැමති නම් ඔබට එය භාවිතා කළ හැකිය if-else
.
හැර වෙනත් ක්රමයක් නම්, GET
හෝ POST
ලෙස HTML ස්වරූපයෙන් අවශ්ය වේ, බොහෝ විට ස්වරූපයෙන් සඟවා ක්ෂේත්රයේ විසදිය ඇත.
<!-- 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>
HTTP ක්රම පිළිබඳ වැඩි විස්තර සඳහා මම පහත දැක්වෙන StackOverflow ප්රශ්නය වෙත යොමු වීමට කැමැත්තෙමි:
ආදාන සනීපාරක්ෂාව තුළින් ආරක්ෂාව සපයන අතරම ඉල්ලීම් ක්රමය හඳුනා ගැනීමට අපට input_filter භාවිතා කළ හැකිය .
$request = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);
ඔබට getenv
ශ්රිතය භාවිතා කළ හැකි අතර $_SERVER
විචල්යයක් සමඟ වැඩ කිරීමට අවශ්ය නැත :
getenv('REQUEST_METHOD');
වැඩි විස්තර:
මෙය REST ගැන වන බැවින්, සේවාදායකයෙන් ඉල්ලීම් ක්රමය ලබා ගැනීම පමණක් ප්රමාණවත් නොවේ. ඔබට RESTful මාර්ග පරාමිතීන් ද ලැබිය යුතුය. RESTful පරාමිතීන් සහ GET / POST / PUT පරාමිතීන් වෙන් කිරීමට හේතුව සම්පතක් හඳුනා ගැනීම සඳහා තමන්ගේම අද්විතීය URL එකක් තිබිය යුතුය.
සිහින් භාවිතයෙන් PHP හි RESTful මාර්ග ක්රියාත්මක කිරීමේ එක් ක්රමයක් මෙන්න:
https://github.com/codeguy/Slim
$app = new \Slim\Slim();
$app->get('/hello/:name', function ($name) {
echo "Hello, $name";
});
$app->run();
ඒ අනුව සේවාදායකය වින්යාස කරන්න.
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');
$request = new \Zend\Http\PhpEnvironment\Request();
$httpMethod = $request->getMethod();
මේ ආකාරයෙන් ඔබට සෙන්ඩ් රාමුව 2 හි ද සාක්ෂාත් කරගත හැකිය. ස්තූතියි.
එය ඉතා සරල ය $ _SERVER ['REQUEST_METHOD'] භාවිතා කරන්න;
උදාහරණයක්:
<?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']
අභිරුචිකරණය කළ ක්රමවේදයන් තුළ පවා පිළිබිඹු වේ. මෙම ක්රමය ඉල්ලීම් ශීර්ෂයේ ඇති නූලක් පමණක් බවත් එහි නිරවද්යතාවය පරීක්ෂා කිරීම අපගේ කර්තව්යය බවත් මතක තබා ගන්න.
මූලික php හි ඔබට මේ ආකාරයට කළ හැකිය:
<?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;
}
?>
$_GET
ඔබ වෙනත් වර්ගයක නිසි ඉල්ලීමක් යවන විට පවා PHP සියළුම පරාමිතීන් ජනගහනය කරන බව අතිරේකව සටහන් කිරීම වටී.
ඉහත පිළිතුරු පැතැලිව ක්රම සම්පූර්ණයෙන්ම නිවැරදි, කෙසේ වෙතත් ඔබ වෙනුවෙන් additionaly පරීක්ෂා කිරීමට අවශ්ය නම්, GET
සමඟ කටයුතු පරාමිතීන් POST
, DELETE
, PUT
, ආදිය ඉල්ලීම, ඔබ ප්රමාණය පරීක්ෂා කිරීමට අවශ්ය $_GET
සාධක විය.
ක්රමයක් ඉල්ලා සිටි විට, එය අ array
. එබැවින් සරලව පරීක්ෂා කරන්න count()
.
$m=['GET'=>$_GET,'POST'=>$_POST];
foreach($m as$k=>$v){
echo count($v)?
$k.' was requested.':null;
}
මම මෙම කේතය භාවිතා කළෙමි. එය ක්රියාත්මක විය යුතුය.
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;
}
මෙම ඉහත කේතය සමඟ ක්රියා කරන REST calls
අතර එය සමඟද ක්රියා කරයිhtml form
<form method="post">
<input name="_method" type="hidden" value="delete" />
<input type="submit" value="Submit">
</form>
ඔබට ඕනෑම විමසුම් වචන දත්ත ලබා ගත හැකිය www.example.com?id=2&name=r
ඔබ දත්ත භාවිතා විය යුතුයි $_GET['id']
හෝ $_REQUEST['id']
.
ආකෘති වැනි පශ්චාත් දත්ත මාර්ගයෙන් <form action='' method='POST'>
ඔබ භාවිතා කළ යුතුය $_POST
හෝ $_REQUEST
.