Si alguien nos pide que recuperemos el contenido que se ha enviado usando el método POST lo primero que se nos viene a la mente es usar $_POST y acceder al contenido usando el nombre del parámetro.
El problema se presenta cuando los datos no se pasan como parámetro, como ocurre con muchas interfaces REST, sino que los recibimos en el cuerpo de la petición.
En estos casos la variable global $_POST no se llena con esos valores sino que tenemos que hacer uso del siguiente código para recuperar el contenido de la petición ya que PHP coloca en el wrapper php://input el cuerpo de la petición para que pueda ser recuperado por nuestra aplicación.
- /**
- * Lee y decodifica la información JSON recibida del navegador a partir de una petición POST
- * y los almacena en la propiedad _data.
- * Limpia los datos recibidos de caracteres inesperados.
- *
- * @param $associative bool Indica si se debe devolver un array asociativo o
- * un objeto a partir de los datos JSON recibidos.
- */
- protected function _loadJsonData($associative = FALSE)
- {
- if (isset($_SERVER['CONTENT_TYPE']) && stripos($_SERVER['CONTENT_TYPE'], 'application/json') !== FALSE)
- {
- $_data = file_get_contents('php://input');
- if ($_data)
- {
- $this->_data = json_decode(
- filter_var(
- $_data,
- FILTER_SANITIZE_STRING,
- FILTER_FLAG_NO_ENCODE_QUOTES | FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH
- ),
- $associative
- );
- }
- }
- }