J'ai travaillé avec des sessions, la conception MVC et l'orienté objet PHP. Où dois-je enregistrer ou récupérer des données d'une session? Je voudrais le récupérer de l'intérieur des méthodes afin que je ne dois pas passer les données aux méthodes. Quelle est la meilleure pratique?Meilleure façon d'utiliser des sessions avec MVC et OO PHP
Répondre
Je le place généralement dans le contrôleur. C'est juste logique .. Le contrôleur décide ce qui se passe et pourquoi ne pas le laisser décider si les gens sont autorisés à faire les actions demandées. Généralement, vous avez plusieurs contrôleurs dans un système MVC. Par exemple. BaseController (abstract - common), NonSessionController étend BaseController (par exemple: utilisé pour les pages statiques), SessionController étend BaseController (traitement de la session principale ici - ceci pourrait être abstrait). Si vous avez par exemple différents types d'utilisateurs, vous pouvez polymorphiser ceux de contrôleur tels que: AdminController, UserController, Etc.
Je l'ai essayé de plusieurs manières, y compris en utilisant une classe d'encapsulation statique pour la gérer, mais je reviens toujours à l'utilisation du tableau superglobal seul. J'utilise toujours un wrapper pour les vérifications d'authentification et d'autres tâches répétitives, mais, en fin de compte, c'est plus facile et moins verbeux pour moi d'utiliser la configuration de stock.
Je pense que cela dépend de la portée de l'utilisation des données renvoyées, si elles ne sont utilisées qu'à l'intérieur d'une méthode, pourquoi vous devriez les récupérer à l'extérieur, et la session est toujours disponible dans les variables superglobales seulement quand c'est nécessaire.
Je ne voudrais pas déranger avec des enveloppes de session. Vous ne gagnerez pas assez pour mériter les limitations. Traverser la superglobale vous permet d'utiliser n'importe quelle structure de données (si tout va bien). Mes données de session finissent toujours par être deux ou plusieurs niveaux de données de tableau, ce qui est trop fastidieux à gérer via un wrapper de session.
Le superglobal ne vous limite même pas d'avoir PHP stocker vos données de session dans une base de données en utilisant un save handler, ce qui est assez agréable pour l'évolutivité.
Personnellement, je suis un grand fan de la classe wrapper Zend_Session. Je préfère travailler avec des données dans un style orienté objet et l'avantage de l'espace de nommage pour utiliser un wrapper est un plus.
Lequel de ces éléments vous semble le mieux?
$_SESSION['Zend_Auth']['user'] = "myusername";
ou
$authNamespace = new Zend_Session_Namespace('Zend_Auth');
$authNamespace->user = "myusername";
Je préfère le look que l'utilisation des accesseurs vous donne.
Remarque: Dans un système MVC, quelle que soit la méthode que vous choisissez, vous devez toujours obtenir/définir des données de session dans votre automate.