Zend framework 2, vous bénéficiez d'session conteneur
J'ai trouvé comment faire pour obtenir une session de conteneur comme ceci:
$session = new \Zend\Session\Conteneur('base');
Mais que faire si j'ai besoin d'accéder à la session en cours de traitement d'une requête HTTP.
Disons que dans le module d'Application du indexAction dans le IndexController, puis-je rediriger l'Utilisateur\Controller\IndexController et ont besoin d'accéder à la session de nouveau, puis, dans un helper de vue ou deux, et qui sait combien de fois plus.
Lors de la construction de la session contenant à chaque fois de nouveau, c'est une perte de temps de traitement. Oui, j'ai débogué pour voir ce qu'il se passe dans le constructeur, et oui, il y a un peu de code exécuté en coulisses. C'est pas comme si le constructeur serait juste de retour d'une variable globale ou quelque chose d'autre qui serait immuable et n'a pas besoin d'un processus de construction.
Alors que faire?
Dois-je créer un service de celle-ci?
un plugin de contrôleur?
une aide de vue?
un service et un plugin de contrôleur et d'un helper de vue, ce dernier appelant le service?
Je suis sûr que c'est quelque chose que beaucoup de gens doivent avoir rencontré et ont abordé, mais je ne trouve aucune information sur ce.
Tout soupçon est chèrement apprécié.
Merci beaucoup d'avance! 🙂
OriginalL'auteur Oliver Konig | 2013-12-08
Vous devez vous connecter pour publier un commentaire.
Voici un plus affinée et améliorée de la version.
Il se compose du service "SessionService", un ViewHelper (qui appelle la SessionService), un ControllerPlugin (qui appelle également le SessionService), et montre comment les configurer dans le fichier de configuration "module.config.php".
Assurez-vous de définir "l'utilisation" des chemins ou utiliser la classe absolue des chemins dans le fichier config.
SessionService.php:
SessionHelper.php:
SessionPlugin.php:
module.config.php:
OriginalL'auteur Oliver Konig
Dans votre écriture du Contrôleur:-
utiliser Zend\Session\Conteneur;
Faire des variable de Session
"utilisateur" est Votre Nom de Session Pour mettre en Valeur dans Votre Session d'écriture:
Après le Stockage, Vous pouvez Accéder à Votre Session:
Pour détruire une Variable de Session d'Utilisation:
c'est tout Comme : -
unset($_SESSION['utilisateur']);
http://wownewcode.blogspot.in/2013/12/set-session-in-zend-framework-2.html
OriginalL'auteur Dharmendra
Une fois que vous avez initialisé une session Conteneur, vous pouvez ré-utiliser avec $_SESSION['container_name'];
Fondamentalement
$session = new \Zend\Session\Container('base');
permettra de créer unArrayObject
nommébase
dans $_SESSION. Un avantage de l'initialisation par la création d'un Conteneur, c'est que vous pouvez spécifier une durée de vie de l'expiration ou après x-houblon.$_SESSION['base']['key'] = "store this value";
oui, il va à l'encontre de l'idée OO
J'imagine que oui, oui. Si vous voulez vraiment le faire correctement, alors vous avez à injecter les séances de variable, dans chaque classe, vous en avez besoin. Je suis d'accord c'est plus agréable de cette façon.
L'injection de la même variables de session, dans chaque classe, j'ai besoin n'est pas souhaitable pour moi, l'OMI elle conduit à alambiqué et le code dupliqué.
Il ne conduit pas à la plus compliquée code qu'avec toute autre dépendance à mon humble avis.
new Object(new Dep1(), new Dep2(), new Container('base'))
(pour éviter les doublons, vous pouvez vous inscrire réutilisables instances avec un gestionnaire de service).OriginalL'auteur netiul
Je pense que vous devez utiliser le Gestionnaire de session et de service avec le conteneur de stockage pour atteindre votre objectif.
vous pouvez le mettre dans votre Module d'application
Application\Module.php
utiliser Zend\Session\Config\SessionConfig;
}
et dans
module.config.php
et de vos services, vous pouvez l'utiliser comme ça. Parexemple dans le service d'Authentification.
OriginalL'auteur Mubo
Voici ma solution provisoire ou une solution de contournement, composé de:
- un service pour le stockage de la session d'objet conteneur.
- un plugin de contrôleur pour un accès facile à la session récipient, sans avoir à injecter une dépendance dans chaque contrôleur.
Le service de session:
Le plugin de contrôleur:
De Configuration dans module.config.php:
Exemple d'utilisation de n'importe quel contrôleur ou le plugin de contrôleur de la méthode:
ou de forme courte (étant donné que la session de service et le plugin de contrôleur à la fois de mettre en œuvre __invoke):
et peuvent ensuite utiliser la session conteneur pour stocker toutes les variables, comme ceci:
Parce que le service de session est créé par une usine de la fonction par le biais de module.config.php il n'est créé qu'une seule fois.
La session conteneur est une variable statique dans le service de session et créée une seule fois, c'est à dire si elle n'existe pas.
Dans les appels suivants à la getSessionContainer fonction, ce qu'une seule fois créé statique de la session conteneur est renvoyé.
C'est juste une solution de contournement provisoire solution qui fonctionne pour moi pour l'instant, mais pour les rendre réutilisables pour d'autres applications, il doit fournir des fonctions pour personnaliser la session contenant le nom et le lieu de stockage et de la stratégie, ces pièces sont manquantes dans cette simple solution de rechange.
Remarque: Une aide de vue ne devrait pas être nécessaire. Les variables de Session ne doit pas être définie en vue, et si la vue a besoin de lire, d'accès, les données doivent être transmises par le biais d'un modèle d'affichage de contrôleur de vue.
OriginalL'auteur Oliver Konig