Solución:
¿Cuáles son estos métodos (PUT) y (DELETE) para …
Hay muchas palabras para explicar esto, y no soy lo suficientemente hábil para hacerlo, pero como ya se publicó, un resumen rápido de lo que describe la especificación HTTP.
El protocolo básicamente dice esto:
-
usar OBTENER cuando lo necesitas acceder a un recurso y recuperar datos, y no tiene que modificar ni alterar el estado de estos datos.
-
usar CORREO cuando lo necesitas enviar algunos datos al servidor. Ex. de un formulario para guardar estos datos en algún lugar.
-
usar CABEZA cuando lo necesitas acceder a un recurso y recuperar solo los encabezados de la respuesta, sin datos de recursos.
-
usar PONER cuando lo necesitas reemplazar el estado de algunos datos ya existentes en ese sistema.
-
usar ELIMINAR cuando lo necesitas eliminar un recurso (relativo al URI que ha enviado) en ese sistema.
-
usar OPCIONES cuando necesita obtener las opciones de comunicación de un recurso, por lo que para comprobar los métodos permitidos para ese recurso. Ex. lo usamos para las solicitudes de CORS y las reglas de permisos.
-
Puede leer sobre los dos métodos restantes en ese documento, lo siento, nunca lo he usado.
Básicamente, un protocolo es un conjunto de reglas que debe usar desde su aplicación para adherirse a él.
… y si es posible usarlos en PHP, ¿cómo haría esto?
Desde su aplicación php puede recuperar qué método se utilizó mirando en la matriz super global $_SERVER
y verifica el valor del campo REQUEST_METHOD
.
Entonces, desde su aplicación php, ahora puede reconocer si se trata de una solicitud DELETE o PUT, p. Ej. $_SERVER['REQUEST_METHOD'] === 'DELETE'
o $_SERVER['REQUEST_METHOD'] === 'PUT'
.
* Tenga en cuenta también que algunas aplicaciones que se ocupan de navegadores que no admiten los métodos PUT o DELETE utilizan el siguiente truco, un campo oculto de la forma html con el verbo especificado en su atributo de valor, por ejemplo:
<input name="_method" type="hidden" value="delete" />
Siga un ejemplo con una pequeña descripción sobre una posible forma de manejar esas 2 solicitudes http
Cuando usted (su navegador, su cliente) solicita un recurso a un servidor HTTP, debe utilizar uno de los métodos que acepta el protocolo (HTTP). Entonces su solicitud debe aprobarse:
- UN MÉTODO
- Un Uri del recurso
- Solicitar encabezados, como User-Agent, Host, Content-Length, etc.
- (Cuerpo opcional de la solicitud)
Ahora, si bien podría obtener datos de las solicitudes POST y GET con los respectivos globales ($_GET
, $_POST
), en caso de solicitudes PUT y DELETE, PHP no proporciona estos globales de acceso rápido; Pero puedes usar el valor de $_SERVER['REQUEST_METHOD']
para verificar el método en la solicitud y manejar su lógica en consecuencia.
Entonces una solicitud PUT se vería así:
PUT /something/index.php
(body) maybe=aparameter
y puede acceder a esos datos en PHP leyendo el php://input
corriente, ej. con algo como:
if ($_SERVER['REQUEST_METHOD'] === 'PUT') {
$myEntireBody = file_get_contents('php://input'); //Be aware that the stream can only be read once
}
y una solicitud DELETE se vería así:
DELETE /something/index.php?maybe=aparameter
y nuevamente puede construir su lógica después de haber verificado el método:
if ($_SERVER['REQUEST_METHOD'] === 'DELETE') {
// do something
}
Preste atención a que una solicitud DELETE no tiene cuerpo y preste mucha atención también al código de estado de respuesta (por ejemplo, si recibió una solicitud PUT y actualizó ese recurso sin errores, debe devolver un estado 204 -Sin contenido-).
Forma de usar datos PUT de PHP:
$method = $_SERVER['REQUEST_METHOD'];
if ('PUT' === $method) {
parse_str(file_get_contents('php://input'), $_PUT);
var_dump($_PUT); //$_PUT contains put fields
}
PHP $_GET
y $_POST
están mal nombrados. $_GET
se utiliza para acceder a los valores de los parámetros de la cadena de consulta, y $_POST
le permite acceder al cuerpo de la solicitud.
El uso de parámetros de cadena de consulta no se limita a las solicitudes GET, y otros tipos de solicitudes además de POST pueden venir con un cuerpo de solicitud.
Si desea averiguar el verbo utilizado para solicitar la página, utilice $_SERVER['REQUEST_METHOD']
.