ejemplo - Detección del tipo de solicitud en PHP(GET, POST, PUT o DELETE)
php request method (11)
¿Cómo puedo detectar qué tipo de solicitud se utilizó (GET, POST, PUT o DELETE) en PHP?
Es muy simple, simplemente 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;
}
?>
Cuando se solicita un método, tendrá una array
. Así que simplemente consulte con count()
.
$m=[''GET''=>$_GET,''POST''=>$_POST];
foreach($m as$k=>$v){
echo count($v)?
$k.'' was requested.'':null;
}
Dado que se trata de REST, solo obtener el método de solicitud del servidor no es suficiente. También necesita recibir 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 la 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 configurar 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'');
En core php puedes hacer esto:
<?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;
}
?>
La detección del método HTTP o el llamado 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 instrucción if-else
.
Si se requiere un método distinto de GET
o POST
en un formulario html, 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, quisiera referirme a la siguiente pregunta de :
Mediante el uso
$_SERVER[''REQUEST_METHOD'']
Ejemplo
if ($_SERVER[''REQUEST_METHOD''] === ''POST'') {
// The request is using the POST method
}
Para más detalles, consulte la documentación de la variable $ _SERVER .
Puede obtener cualquier dato de cadena de consulta, por ejemplo, www.example.com?id=2&name=r
Debe obtener datos utilizando $_GET[''id'']
o $_REQUEST[''id'']
.
Los datos de publicación se refieren a la forma <form action='''' method=''POST''>
debe usar $_POST
o $_REQUEST
.
Puede usar la función getenv
y no tiene que trabajar con una variable $_SERVER
:
getenv(''REQUEST_METHOD'');
Más información:
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 fuera de la caja, 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;
}
También podemos usar el 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);
$request = new /Zend/Http/PhpEnvironment/Request();
$httpMethod = $request->getMethod();
De esta manera también puede lograr en zend framework 2 también. Gracias.