Respuestas:
Mediante el uso
$_SERVER['REQUEST_METHOD']
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// The request is using the POST method
}
Para obtener más detalles, consulte la documentación de la variable $ _SERVER .
$_GET['var'].
$_POSTy $_GETson algo lamentablemente nombrados. $_GETcontienen variables del componente de consulta de la URL, independientemente del método HTTP. $_POSTcontendrá campos de formulario si la solicitud se envió como application/x-www-form-urlencoded.
REST en PHP se puede hacer bastante simple. Cree http://example.com/test.php (descrito a continuación). Use esto para llamadas REST, por ejemplo, http://example.com/test.php/testing/123/hello . Esto funciona con Apache y Lighttpd listos para usar, y no se necesitan reglas de reescritura.
<?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;
}
@frente de $_SERVER['PATH_INFO']?
PHP Notice: Undefined index: PATH_INFOen caso de que PATH_INFO no esté en $_SERVER. ¡Estoy agregando esto a mi bolsa de trucos de inmediato! Es una forma de decir "Sé que puede que no haya una entrada con ese nombre en esta matriz, y estoy listo para eso, así que cállate y haz lo que te digo". :) Gracias chicos, tanto por publicar esta respuesta como por llamar mi atención sobre ese personaje en particular.
<?php $request = explode("/", substr(@$_SERVER['PATH_INFO'], 1)); $rest = 'rest_'.strtolower($_SERVER['REQUEST_METHOD']); if (function_exists($rest)) call_user_func($rest, $request); ?>
La detección del llamado método HTTP REQUEST METHODse puede hacer usando el siguiente fragmento de código.
$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
}
También puede hacerlo usando un switchsi lo prefiere sobre la if-elsedeclaración.
Si se requiere un método distinto de GETo POSTen un formulario HTML, esto a menudo se resuelve utilizando un campo oculto en el formulario.
<!-- 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>
Para obtener más información sobre los métodos HTTP, me gustaría consultar la siguiente pregunta de StackOverflow:
También podemos usar input_filter para detectar el método de solicitud y al mismo tiempo proporcionar seguridad a través del saneamiento de entrada.
$request = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);
Como se trata de REST, no basta con obtener el método de solicitud del servidor. También debe recibir los parámetros de ruta RESTful. La razón para separar los parámetros RESTful y los parámetros GET / POST / PUT es que un recurso debe tener su propia URL única para su identificación.
Aquí hay una forma de implementar rutas RESTful en PHP usando Slim:
https://github.com/codeguy/Slim
$app = new \Slim\Slim();
$app->get('/hello/:name', function ($name) {
echo "Hello, $name";
});
$app->run();
Y configure el servidor en consecuencia.
Aquí hay otro ejemplo usando 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');
Puede usar la getenvfunción y no tiene que trabajar con una $_SERVERvariable:
getenv('REQUEST_METHOD');
Más información:
Es muy simple, solo use $ _SERVER ['REQUEST_METHOD'];
Ejemplo:
<?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'], incluso los personalizados. Recuerde que el método es solo una cadena en el encabezado de la solicitud y que es nuestra tarea verificar su corrección.
$request = new \Zend\Http\PhpEnvironment\Request();
$httpMethod = $request->getMethod();
De esta manera también puede lograr en zend framework 2 también. Gracias.
En core php puedes hacer así:
<?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;
}
?>
También es valioso tener en cuenta que PHP completará todos los $_GETparámetros incluso cuando envíe una solicitud adecuada de otro tipo.
Métodos en respuestas anteriores son completamente correctas, sin embargo si quieres adicionalmente cheque de GETparámetros durante la manipulación POST, DELETE, PUT, etc. solicitud, es necesario comprobar el tamaño de la $_GETmatriz.
Cuando se solicitó un método, tendrá un array. Así que simplemente consulte con count().
$m=['GET'=>$_GET,'POST'=>$_POST];
foreach($m as$k=>$v){
echo count($v)?
$k.' was requested.':null;
}
Usé este código. Deberia de funcionar.
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;
}
Este código anterior funcionará REST callsy también funcionará conhtml form
<form method="post">
<input name="_method" type="hidden" value="delete" />
<input type="submit" value="Submit">
</form>
Puede obtener cualquier información de cadena de consulta, es decir www.example.com?id=2&name=r
Debe obtener datos utilizando $_GET['id']o $_REQUEST['id'].
Publicar datos significa como formulario <form action='' method='POST'>que debe usar $_POSTo $_REQUEST.