|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Inscription : juillet 2006 Messages : 664 ![]() |
Bonjour a tous,
Je m'essaie au tutoriel de la ferme du web concernant Symfony. Concernant l'usage des sessions, je m'y prends de la façon suivante : Je crée un module quizz via symfony. Code :
symfony generate:module frontend quizz Dans mon action executeIndex, je fais : Code :
$this->getUser()->setAttribute("email", "toto@exemple.com"); Code :
echo $sf_user->getAttribute('email') ; Quelqu'un peut-il m'expliquer ce que je fais mal !?!? Merci |
|
|
00
|
|
|
#2 |
|
Invité régulier
![]() Alexis Inscription : septembre 2010 Messages : 5 ![]() |
Tu as dans ton frontend dans le dossier lib le fichier "myUser.class.php" qui étend "sfBasicSecurityUser" ?
|
|
|
00
|
|
|
#3 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
La variable $sf_user n'existe plus dans le template. Elle a été supprimé lors du passage de la 1.0 à la 1.1 dans mes souvenir.
Le message est donc correcte. L'idéal est de transmettre directement ta donnée à ton template, le stockage dans l'objet user n'a pas d'intérêt pour cette action. Dans executeIndexEt tu la récupère dans le template parCe qui n’empêche pas d'utiliser l'objet user pour un stockage entre les lancements de l'application.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#4 |
|
Membre habitué
![]() Inscription : juillet 2006 Messages : 664 ![]() |
Ok, merci bien pour vos réponses.
Alexoos : Oui, j'ai bien "myUser.class.php" qui étend "sfBasicSecurityUser" dans lib. Michel : J'aimerai bien transmettre une donnée en session en fait. Du coup, comment dois-je m'y prendre ? J'imagine que je dois utiliser l'objet myUser (car il faut bien que la donnée puisse transiter entre les modules). Dans le site que je développe, j'ai développé un mécanisme d'authentification et je dois garder le login en session et le détruire à la déconnexion. Comment donc créer la variable de session à la connexion (dans mon action et le récupérer dans mon template j'imagine) et également comment le détruire ?? |
|
|
00
|
|
|
#5 | ||||||
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
A noter que ton objet myUser peut étendre d'autres objet, notamment si tu utilises sfGuard, il faut que le parent soit sfUser et idéalement, sfBasicSecurityUser si tu veux gérer de l’authentification et de la sécurité.
Pour récupérer les données dans ton template, l'idéal est de les préparer dans le comtrôleur si tu veux garder une indépendance des couches conforme au MVC. En effet, il est possible que dans une évolution future de ton application ces données ne proviennent plus ou plus uniquement de ton objet sfUser. L'idée serait donc de créer un tableau en charge des données a transmettre au template, donnée qui seront chargées dans le contrôleur et lue dans le template. Dans ton contrôleur (executeIndex) Code :
Code :
et dans ton template Et si tu veux tous faire dans le template (ce que je ne saurais recommander) Code :
Je pense que la première solution est la meilleur au niveau de l'indépendance des couches et garanti qu'il ne faudra pas modifier le template si les données changent d'origine dans le développement.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
||||||
|
00
|
|
|
#6 | ||
|
Membre habitué
![]() Inscription : juillet 2006 Messages : 664 ![]() |
Bon, j'ai probablement du rater une étape.
Voici le message que j'ai, avec la première des méthodes données : Code :
Notice: Undefined variable: parameters Code :
|
||
|
|
00
|
|
|
#7 | |||||
|
Invité régulier
![]() Alexis Inscription : septembre 2010 Messages : 5 ![]() |
Citation:
Pourtant, j'utilise la version 1.4, et je peux utiliser la variable sf_user. Donc je ne comprends pas pourquoi, il instancie toujours ma variable. Sinon identifiant_bidon, moi j'allais te conseiller, de faire une méthode login dans myUser : Code :
Je peux ainsi savoir si l'utilisateur est connecté grâce à : Code :
|
|||||
|
|
00
|
|
|
#8 | ||||
|
Membre habitué
![]() Inscription : juillet 2006 Messages : 664 ![]() |
Merci Alexoos
Je crois avoir cerné mon problème. En fait, le hic est pour faire transiter ma variable de session entre les modules. Dans l'action de mon module de login, j'appelle une méthode dans laquelle j'ai cette ligne : Dans la classe MyUSer, j'ai ceci : Code :
Code :
<?php echo $sf_user->getAttribute('name') ?> dans un autre module, j'ai ceci : Code :
|
||||
|
|
00
|
|
|
#9 | ||
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Effectivement les variables sf_context, sf_request, sf_params, request, sf_response, sf_user sont toujours instanciées. Simplement elle ne sont plus documentée.
Par contre, je maintiens que récupérer ces informations dans le template est une mauvaise idée. Désolé pour le parameters, il faut initialiser le tableau avant, je le pensais évident. Donc, avant le code de la première solution, il faut rajouter La méthode getName() de l'objet user n'existe pas, de base, c'est juste un exemple de nom. Si tu mets en place une méthode setName sur ton objet user (elle est bonne ta méthode). Mets aussi une méthode Code :
Dans le cas de disparition mystérieuse de valeur sur l'objet user, utilise la barre de débug de symfony, tu peux y consulter l'ensemble des données stockée dans le container de l'objet user.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
||
|
00
|
Copyright © 2000-2012 - www.developpez.com