A free and open-source book on ZF3 for beginners

Translation into this language is not yet finished. You can help this project by translating the chapters and contributing your changes.

15.4. Contenedores de sesión

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.

15.4.1. Método 1. Instanciación manual de un contenedor de sesiones

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.

15.4.2. Método 2. Crear un contenedor de sesiones usando una factory

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.

15.4.3. Guardar la información en una sesión con el contenedor de sesión

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


Top