Una vez que tengamos configurado el manejador de sesiones, podemos almacenar y recuperar información en/desde la sesión. Para hacer esto
usamos contenedores de sesión. Los contenedores de sesión son implementados por la clase Container
que esta ubicada en el espacio de nombres
Zend\Session
.
El contenedor de sesión puede usarse para guardar la información en la sesión y recuperarla desde la sesión. Para evitar conflictos de nombres entre diferentes clases, módulos y componentes que usan sesiones, el contenedor de sesiones nos permite especificar el espacio de nombres bajo el que la información se guardará. El espacio de nombres de un contenedor puede contener caracteres en mayúsculas y minúsculas, pisos y barras invertidas. Por ejemplo; "Session\ContainerName", "session_container_name" y "SessionContainerName" son todos nombres de espacio validos para contenedores.
Los contenedores de sesión trabajan de cerca con el manejador de sesiones. Cuando creamos un contenedor de sesiones este llama al método
start()
del manejador de sesiones y así la sesión es comenzada e inicializada.
Ahora vamos a comenzar a usar contenedores. Podemos crear un contenedor de dos maneras equivalentes: o la instanciación manual del contenedor o dejar la tarea a una factory. La segunda es más fácil y es la que recomendamos.
Podemos crear un contenedor de sesión con el operador new
pero necesitamos pasar una instancia del
servicio de manejo de sesiones al constructor del contenedor:
use Zend\Session\Container;
// We assume that $sessionManager variable is an instance of the session manager.
$sessionContainer = new Container('ContainerNamespace', $sessionManager);
De esta manera, antes de crear el contenedor debemos haber injectado el manejador de sesiones en nuestro controlador, servicio, etc. en el que necesitamos crear un contenedor.
Este método es equivalente al primero, pero el contenedor de sesión es creado por una factory.
Necesitamos registrar el espacio de nombres del contenedor que usaremos. Para hacer esto
agregamos la llave session_containers
en nuestro archivo module.config.php
de la siguiente manera:
<?php
return [
// ...
'session_containers' => [
'ContainerNamespace'
],
];
Nosotros podemos escribir los nombres de contenedores permitidos dentro de esta llave. Elegir un nombre de contenedor depende de ti, solo hay que garantizar que el nombre es único entre todos los otros nombres de servicios.
Una vez registrado un nombre de contenedor (o varios nombres de contenedores) podemos crear el contenedor y trabajar con él. Que es lo que típicamente hacemos en una factory con la ayuda del manejador de servicio:
// The $container variable is the service manager.
$sessionContainer = $container->get('ContainerNamespace');
Como podemos ver se recupera un contenedor de sesión desde el manejador de servicio mediante el nombre con que fue registrado.
Cuando se crea el contenedor de sesión, nosotros podemos guardar la información en él de la siguiente manera:
$sessionContainer->myVar = 'Some data';
Para recuperar la información del contenedor de sesiones podemos usar el siguiente código:
if(isset($sessionContainer->myVar))
$myVar = $sessionContainer->myVar;
else
$myVar = null;
Para remover la información de sesión usamos el siguiente código:
unset($sessionContainer->myVar);
Para algunos ejemplos prácticos del uso de contenedores de sesión, podemos revisar la sección Implementing Multi-Step Forms