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']
.
$_POST
y $_GET
son algo lamentablemente nombrados. $_GET
contienen variables del componente de consulta de la URL, independientemente del método HTTP. $_POST
contendrá 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_INFO
en 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 METHOD
se 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 switch
si lo prefiere sobre la if-else
declaración.
Si se requiere un método distinto de GET
o POST
en 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 getenv
función y no tiene que trabajar con una $_SERVER
variable:
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 $_GET
pará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 GET
parámetros durante la manipulación POST
, DELETE
, PUT
, etc. solicitud, es necesario comprobar el tamaño de la $_GET
matriz.
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 calls
y 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 $_POST
o $_REQUEST
.