Peticiones HTTP con HTTPFoundation

El componente HTTPFoundation de Symfony define una capa orientad a objetos para las especificaciones HTTP, en PHP las solicitudes HTTP están representadas por algunas variables globales ($_GET, $_POST,$_FILES, $_COOKIE, $_SESSION,...) y la respuesta es generada por algunas funciones como (echo, header, setcookie, ...)

Éste componente reemplaza todas las variables y funciones globales PHP para manipular las especificaciones HTTP predeterminadas por una capa orientada a objetos, se recomienda encarecidamente utilizar HTTPFoundation en vez de las definiciones por defecto de PHP a la hora de trabajar con peticiones HTTP.

Objeto $http

El objeto $http es definido en Ocrend/Kernel/Config/Config.php, representa un contenedor para las peticiones $_GET, $_POST, $_FILES y $_SERVER

La forma correcta de acceder a él, desde cualquier controlador o modelo es haciendo una llamada global dentro del método que lo necesite.

global $http;

Accediendo a las solicitudes

Tablas de equivalencias.

PHP Equivalente HTTPFoundation
$_GET $http->query->all() devuelve array con toda la información enviada por GET
$_GET['elemento'] $http->query->get('elemento') devuelve NULL si no existe 'elemento'
$_GET['elemento'] = 'Nuevo Valor' $http->query->set('elemento','Nuevo Valor')
unset($_GET['elemento]) $http->query->remove('elemento')
PHP Equivalente HTTPFoundation
$_POST $http->request->all() devuelve array con toda la información enviada por POST
$_POST['elemento'] $http->request->get('elemento') devuelve NULL si no existe 'elemento'
$_POST['elemento'] = 'Nuevo Valor' $http->request->set('elemento','Nuevo Valor')
unset($_POST['elemento]) $http->request->remove('elemento')
PHP Equivalente HTTPFoundation
$_SERVER $http->server->all() devuelve array con todos los inidices posibles de $_SERVER
$_SERVER['SERVER_NAME'] $http->server->get('SERVER_NAME')
$_SERVER['HTTP_CONTENT_TYPE'] $http->headers->get('Content-Type')
PHP Equivalente HTTPFoundation
$_FILES $http->files->all() devuelve array con todos los archivos subidos
$file = $_FILES['archivo'] $file = $http->files->get('archivo') devuelve NULL si no se ha subido 'archivo'
$file['size'] $file->getClientSize()
$file['name'] $file->getClientOriginalName()
end(explode('.', $file['name'])) extensión del archivo $file->getClientOriginalExtension()
move_uploaded_file(...) guardar archivo $file->move('ruta/', $file->getClientOriginalName());

Objeto $session

El objeto $session es definido en Ocrend/Kernel/Config/Config.php, representa un objeto para manejar todas las sesiones dentro del sistema.

La forma correcta de acceder a ellas, desde cualquier controlador o modelo es haciendo una llamada global dentro del método que lo necesite.

global $session;

NOTA: el tiempo de vida de las sesiones depende del parámetro sessions/life_time en Ocrend.ini.yml

NOTA 2: el tiempo de vida de la sesión de un usuario será igual al de todas las sesiones, excepto cuando la modalidad de sesión por cookie encriptada esté activa, dicha funcionalidad viene activa por defecto.

Accediendo a las sesiones

Se presenta una tabla de equivalencias.

PHP Equivalente HTTPFoundation
$_SESSION $session->all() devuelve array con todas las sesiones
$_SESSION['elemento'] $session->get('elemento') devuelve NULL si no existe 'elemento'
$_SESSION['elemento'] = 'Nuevo Valor' $session->set('elemento','Nuevo Valor')
unset($_SESSION['elemento']) $session->remove('elemento')

Objeto $cookie

El objeto $cookie es definido en Ocrend/Kernel/Config/Config.php, representa un objeto para manejar todas las cookies dentro del sistema.

La forma correcta de acceder a ellas, desde cualquier controlador o modelo es haciendo una llamada global dentro del método que lo necesite.

global $cookie;

Accediendo a las cookies

Se presenta una tabla de equivalencias.

PHP Equivalente Ocrend Framework
$_COOKIE $cookie->all() devuelve un array con todas las cookies
$_COOKIE['elemento'] $cookie->get('elemento') devuelve NULL si no existe 'elemento'
setcookie('elemento', 'Valor', time() + 3600, '/') $cookie->set('elemento','Nuevo Valor',3600)
  • El tercer parámetro corresponde al tiempo de vida de la cookie.
  • El cuarto parámetro es opcional, por defecto corresponde al path "/", si se desea especificar otro sólamente se debe indicar
unset($_COOKIE['elemento']) $cookie->remove('elemento')

Sesión de usuario por cookie encriptada

Por defecto, en sessions/user_cookie/enable en Ocrend.ini.yml viene activado éste sistema de sesiones de usuarios con cookie encriptada, al colocar dicho parámetro en false se deshabilita esa modalidad de sesiones.

Ésta modalidad consiste en hacer funcionar dos cookies, una encriptada sobre la otra que contienen información relativa para permitir que la sesión interna que mantiene al usuario conectado, perdure más en el tiempo y sea indpendiente al tiempo de vida de las sesiones en general dentro del sistema.

Con ésta modalidad no hay ningún tipo de cambio con respecto a la forma en la que manejamos la sesión actual de un usuario, y las cookies encriptadas públicas no tienen ningún tipo de información posible sobre el usuario que pueda estar conectado.

  • El tiempo de vida en segundos, de la sesión del usuario en esta modalidad puede ser editado en sessions/user_cookie/lifetime
  • Existe una clave PRIVADA, que no debe ser expuesta de ninguna manera al usuario que visita la web, ubicada en sessions/user_cookie/key_encrypt, dicha clave es utilizada para encriptar/desencriptar la información de una de las cookies persistentes, sin ésta clave no es posible desencriptar la cookie por tanto el sistema no sabrá qué usuario pueda estar conectado, se recomienda cambiar la clave por una diferente a la que viene por defecto, con mínimo 20 caracteres de longitud.

Más información acerca de HTTPFoundation

En las siguientes páginas existe más información detallada acerca del componente HTTPFoundation de Symfony