IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Remplissage auto d'un champ de formulaire


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut Remplissage auto d'un champ de formulaire
    Bonjour,

    voici ma deuxième question concernant symfony (et toujours un peu liée au plugin sfGuard).

    D'un point de vue général je me demande comment, dans un formulaire, imposer une valeur (dynamique) à un champ (en hidden, chose assez simple en html+variable php).
    J'ai essayé setDefault(s) mais visiblement ça ne prend que le texte rentré (pas d'interprétation du php).

    Dans mon cas, pour éclaircir la situation, je souhaite qu'un utilisateur puisse me donner des infos sur lui (age, etc...) dans un table 'profil'.
    Je voudrais que lorsque cet utilisateur me soumet son formulaire, dans ma table correspondante, je puisse récupérer $sf_user->getUsername() dans un champ que j'ai moi même nommé 'username' (son nom n'a peu d'importance finalement). Histoire de savoir à qui appartient le profil de qui...

    Sinon je pense aussi que je pourrai repenser mon modèle de données et lier cette table 'profil' à la table 'sf_guard_user', mais pour des raisons "extérieures" j'aimerai vraiment me passer de ça. Et ça ne résout pas mon problème dans un cas général.

    Merci d'avance

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Corée

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2008
    Messages : 253
    Points : 122
    Points
    122
    Par défaut
    J'imagine qu'il est correct de récupérer cette donnée dans ton contrôleur puis de l'injecter dans ton formulaire.

    Tu peux récupérer l'utilisateur dans action.class.php car il hérite de sfComponent qui contient une fonction pour (getUser()).

    Dans ton fichier action.class.php et dans la fonction xxxSucccess() où tu appelle ton formulaire, tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->myUserName = $this->getUser()->getUsername()
    Dans ton template où tu as ton formulaire :


  3. #3
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Je vais être moins confiant que Fused.

    Je ne suis pas sur de comprendre ce que tu veux faire, ni au niveau de la table sfGuardUser, ni dans un formulaire ou tu voudrais "injecter" des données dans un champ hiden ????

    Dans la partie "éclaircir la situation" le début est clair, mais la fin obscure. En fait, si j'ai bien compris, tu veux que l'utilisateur crée une fiche profil et que celle-ci soit enregistré dans une table, mais pour le reste, je ne vois aucune difficultés.

    Par contre, je te conseil d'utiliser la méthode recherche sur la salle symfony, tu vas y trouver de très nombreux sujet sur la création et la modification d'un profil utilisateur. Je pense que tu devrais y trouver les réponses à tes questions.

  4. #4
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    merci pour la réponse mais ça ne résout malheureusement pas mon problème.
    Je peux ainsi afficher le nom de mon utilisateur dans ma template (chose que j'arrivais à faire auparavant), mais je ne peux pas l'imposer en tant que valeur pour un champ de mon formulaire.

    Je souhaiterai modifier mon fichier xxForm.class.php.

    J'utilise ceci (qui ne marche pas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		$this->setDefaults(array(
    			'pseudo' => '$myUserName',
    			'email' => '$sf_user->getEmailAddress();',
    		));
    ça me rentre dans ma table '$myUserName' directement, pas la valeur

    [edit : mon message ne répond pas à Michel, j'y reviens dans quelques instants]

  5. #5
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Michel Rotta Voir le message
    Je ne suis pas sur de comprendre ce que tu veux faire, ni au niveau de la table sfGuardUser, ni dans un formulaire ou tu voudrais "injecter" des données dans un champ hiden ????

    Dans la partie "éclaircir la situation" le début est clair, mais la fin obscure. En fait, si j'ai bien compris, tu veux que l'utilisateur crée une fiche profil et que celle-ci soit enregistré dans une table, mais pour le reste, je ne vois aucune difficultés.

    Par contre, je te conseil d'utiliser la méthode recherche sur la salle symfony, tu vas y trouver de très nombreux sujet sur la création et la modification d'un profil utilisateur. Je pense que tu devrais y trouver les réponses à tes questions.
    Comme expliqué dans mon message au dessus, je souhaiterai remplir un champ avec la valeur d'une variable. Dans mon cas, l'username de l'utilisateur.

    Pour la fiche profil c'est bien ça ; mais en plus je voudrais que cette fiche corresponde à un utilisateur enregistré dans ma table sfGuard_user, et donc j'aimerai que son username (de la table sf_guard_user) apparaisse dans m table profil. J'aimerai également me passer de liaison entre mes tables (pas de clefs étrangères etc...).

    Pour la fonction recherche, j'en suis déjà en grand utilisateur, sinon j'aurai inondé ce forum depuis longtemps ; mais là, je n'ai pas réussi à trouver ma réponse .

  6. #6
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Citation Envoyé par Hellblow Voir le message
    Comme expliqué dans mon message au dessus, je souhaiterai remplir un champ avec la valeur d'une variable. Dans mon cas, l'username de l'utilisateur.
    Vu le message, si tu met, en php $a = '$MaVariable' tu vas stocker $MaVariable dans $a... pour en stocker le contenu, point n'est besoin de ' ' un $a = $MaVariable sera suffisant, dans ton exemple, cela va donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    'pseudo' => $myUserName,
    ...
    Citation Envoyé par Hellblow Voir le message
    Pour la fiche profil c'est bien ça ; mais en plus je voudrais que cette fiche corresponde à un utilisateur enregistré dans ma table sfGuard_user, et donc j'aimerai que son username (de la table sf_guard_user) apparaisse dans m table profil. J'aimerai également me passer de liaison entre mes tables (pas de clefs étrangères etc...).
    OK, donc tu veux que la personne puisse compléter son profil et avoir son nom qui s'affiche, nom qui provient de la table sfGuardUser.

    Mais je ne comprend pas comment tu espères lier les tables si tu ne veux pas de liaison...

    Citation Envoyé par Hellblow Voir le message
    Pour la fonction recherche, j'en suis déjà en grand utilisateur, sinon j'aurai inondé ce forum depuis longtemps ; mais là, je n'ai pas réussi à trouver ma réponse .
    Cherche encore (pas le temps là pour toi), et tu vas trouver des sujets qui parlent d'étendre la table sfGuardUser, ce qui me semble répondre à tous tes problèmes.

  7. #7
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Michel Rotta Voir le message
    Vu le message, si tu met, en php $a = '$MaVariable' tu vas stocker $MaVariable dans $a... pour en stocker le contenu, point n'est besoin de ' ' un $a = $MaVariable sera suffisant, dans ton exemple, cela va donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    'pseudo' => $myUserName,
    ...
    En fait, dans mon exemple, je sais bien que ça ne peut pas fonctionner, mais si je retire les ' ' ; ça me mets une erreur . Symfony veut absolument que je lui donne un truc entre quotes.

    Voici l'erreur en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Notice: Undefined variable: myUserName in xx/lib/form/doctrine/UtilisateurForm.class.php on line 28
     
    Warning: Cannot modify header information - headers already sent by (output started at xx/lib/form/doctrine/UtilisateurForm.class.php:28) in xx/lib/vendor/symfony/lib/response/sfWebResponse.class.php on line 336
    Citation Envoyé par Michel Rotta Voir le message
    OK, donc tu veux que la personne puisse compléter son profil et avoir son nom qui s'affiche, nom qui provient de la table sfGuardUser.
    Plus ou moins, par "qui s'affiche", j'entends, qui se rentre tout seul dans le champ voulu.

    Merci de ton aide

  8. #8
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Heu, tu es sur que tu as déjà une grande expérience en PHP ?

    "Symfony veut absolument que je lui donne un truc entre quotes." symfony est une surcouche de PHP et ne veux rien...

    Regarde du côté de PHP pour l'explication de tes deux messages d'erreurs.

    Notice: Undefined variable: myUserName...
    Signifie simplement que tu essaie d'attribuer une variable non définie dans ton tableau, pas étonnant que cela ne marche que lorsque tu le met entre ''. Commence par attribuer une valeur à ta variable myUserName et cela pourra mieux marcher.

    Warning: Cannot modify header information - headers already sent...
    Signifie que tu tentes d'afficher quelque chose directement dans le flux utilisateur, au niveau du header alors que celui-ci a déjà été envoyé. Probablement un truc qui traine dans le contrôleur et qui n'a rien à y faire. Ou une bizarrerie non envisageable dans le template.

    Je te conseillerais de faire ou refaire les tutos sur la base de php et de son utilisation courante, ensuite, une fois les bases de PHP comprises, de passer par l'excellent tutoriel sur symfony JobeetJob.

    Après, nous allons pouvoir rediscuter sereinement de ton application.

    Là, il y a trop de notions qui ne me sembles pas maitrisée pour que nous puissions avancer.

    Si tu préfères y aller directement, regarde dans les discutions de la salle, celles qui parlent d'afficher un champs dans un form et celles qui parlent d'étendre la table sfGuardUser, qui vont te permettre de faire fonctionner ton application.

  9. #9
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Michel Rotta Voir le message
    Heu, tu es sur que tu as déjà une grande expérience en PHP ?

    "Symfony veut absolument que je lui donne un truc entre quotes." symfony est une surcouche de PHP et ne veux rien...
    Dsl, c'était une façon de parler...
    Et c'est vrai je n'ai pas une "grande" expérience, sinon je ne poserai pas ces questions ; mais de là à retourner faire les tutos... Ils ne répondent pas à tous mes problèmes.

    Citation Envoyé par Michel Rotta Voir le message
    Notice: Undefined variable: myUserName...
    Signifie simplement que tu essaie d'attribuer une variable non définie dans ton tableau, pas étonnant que cela ne marche que lorsque tu le met entre ''. Commence par attribuer une valeur à ta variable myUserName et cela pourra mieux marcher.

    Warning: Cannot modify header information - headers already sent...
    Signifie que tu tentes d'afficher quelque chose directement dans le flux utilisateur, au niveau du header alors que celui-ci a déjà été envoyé. Probablement un truc qui traine dans le contrôleur et qui n'a rien à y faire. Ou une bizarrerie non envisageable dans le template.
    J'avais bien compris ce que signifiais ces erreurs. Je les donnais à titre d'information sur ce qu'il se passait lorsque je faisais telle ou telle chose...
    Ma grande interrogation c'est justement pourquoi ma variable est nulle ici ? ou du moins comment l'envoyer à mon formulaire ?
    Dans le template il n'y a aucun problème pour voir sa valeur, mais je ne vois pas comment l'exploiter.

    Sinon ma question qui résume tout (je pense ):
    Comment remplir automatiquement un champ caché d'un formulaire à l'aide d'une variable ?

    (notons qu'en php "simple" je n'ai pas de problème avec cela...)

  10. #10
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Ton form, il est lié à une table où indépendant ?

    Peux-tu mettre suivant le cas la fonction setup ou/et la fonction configure du form utilisé.

    Le mieux, pour mettre une valeur par défaut, est de la mettre dans l'enregistrement vierge qui est sous jacent à l'objet form. Mais il faut pour cela que ce soit un form basé sur une table, si non, il y a d'autres solution a voir.

    Par contre, et pour ton application, je maintiens que mettre l'Id de l'utilisateur en champ caché pour faire une modification de mot de passe constitue, dans ton application, un trou monstrueux de sécurité et est une réel très mauvaise idée.

  11. #11
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Michel Rotta Voir le message
    Ton form, il est lié à une table où indépendant ?
    Oui, lié à la table où je compte rentrer le profil de l'utilisateur. Il a été généré avec le module du même nom.

    Citation Envoyé par Michel Rotta Voir le message
    Peux-tu mettre suivant le cas la fonction setup ou/et la fonction configure du form utilisé.
    Voici la fonction configure, inspiré de ce que j'ai appris du tuto jobeet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    public function configure()
      {		
    		$this->setWidgets(array(
    	      'id_utilisateur'   => new sfWidgetFormInputHidden(),
    	      'pseudo'           => new sfWidgetFormInputHidden(),
    	      'email'            => new sfWidgetFormInputHidden(),
    		  'age'              => new sfWidgetFormInputText(),
    	      'poids'            => new sfWidgetFormInputText(),
    	      'taille'           => new sfWidgetFormInputText(),
    		));
     
    		$this->setDefaults(array(
    			// 'pseudo' => '$myUserName',
    			// 'email' => '$sf_user->getEmailAddress();',
    		));
     
    		// Personnalisation des champs, en lien avec le fichier UtilisateurTable.class.php
    		$this->widgetSchema['sexe'] = new sfWidgetFormChoice(array(
    		  'choices'  => Doctrine_Core::getTable('utilisateur')->getSexe(),
    		  'expanded' => true,
    		));
    		$this->validatorSchema['sexe'] = new sfValidatorChoice(array(
    		  'choices' => array_keys(Doctrine_Core::getTable('utilisateur')->getSexe()),
    		));
     
    		$this->widgetSchema['niveau_physique'] = new sfWidgetFormChoice(array(
    		  'choices'  => Doctrine_Core::getTable('utilisateur')->getActivite(),
    		  'expanded' => true,
    		));
    		$this->validatorSchema['niveau_physique'] = new sfValidatorChoice(array(
    		  'choices' => array_keys(Doctrine_Core::getTable('utilisateur')->getActivite()),
    		));
     
    		$this->widgetSchema['comp_culinaire'] = new sfWidgetFormChoice(array(
    		  'choices'  => Doctrine_Core::getTable('utilisateur')->getComp(),
    		  'expanded' => true,
    		));
    		$this->validatorSchema['comp_culinaire'] = new sfValidatorChoice(array(
    		  'choices' => array_keys(Doctrine_Core::getTable('utilisateur')->getComp()),
    		));
     
    		$this->widgetSchema['temps_prep'] = new sfWidgetFormChoice(array(
    		  'choices'  => Doctrine_Core::getTable('utilisateur')->getPrep(),
    		));
    		$this->validatorSchema['temps_prep'] = new sfValidatorChoice(array(
    		  'choices' => array_keys(Doctrine_Core::getTable('utilisateur')->getPrep()),
    		));
     
    		$this->widgetSchema['ideo_utilisateur'] = new sfWidgetFormChoice(array(
    		  'choices'  => Doctrine_Core::getTable('utilisateur')->getIdeo(),
    		));
    		$this->validatorSchema['ideo_utilisateur'] = new sfValidatorChoice(array(
    		  'choices' => array_keys(Doctrine_Core::getTable('utilisateur')->getIdeo()),
    		));
     
    		$this->widgetSchema->setLabels(array(
    			/* des labels */
    		));
     
     
    /*quelques setHelp */
     
    		$this->widgetSchema->setNameFormat('utilisateur[%s]');
     
    		$this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);
     
    		$this->setupInheritance();
      }
    la fonction setDefaults() a été laissée telle quelle après bidouillage, donc fausse...

    Citation Envoyé par Michel Rotta Voir le message
    Le mieux, pour mettre une valeur par défaut, est de la mettre dans l'enregistrement vierge qui est sous jacent à l'objet form. Mais il faut pour cela que ce soit un form basé sur une table, si non, il y a d'autres solution a voir.
    Là je comprends pas bien

    Citation Envoyé par Michel Rotta Voir le message
    Par contre, et pour ton application, je maintiens que mettre l'Id de l'utilisateur en champ caché pour faire une modification de mot de passe constitue, dans ton application, un trou monstrueux de sécurité et est une réel très mauvaise idée.
    Tu dois confondre, je ne souhaite pas faire de modification de mot de passe... Ça doit être un sujet voisin ^^.

    Je voudrais que le champ id_utilisateur dans mon formulaire soit rempli par la valeur de l'id du sf_user , de même pour le pseudo (username du sf_user) et l'email.
    C'est peut-être tout c** et y'a un truc qui m'échappe depuis le début...

  12. #12
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Corée

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2008
    Messages : 253
    Points : 122
    Points
    122
    Par défaut
    Sans avoir tout relu votre discussion, juste comme ça dans ta fonction configure()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $this->setDefaults(array(
    	// 'pseudo' => '$myUserName',
    	// 'email' => '$sf_user->getEmailAddress();',
    ));
    • Pourquoi '$myUserName' et '$sf_user->getEmailAddress();' entre cotes ? Ce sont des variables PHP que tu veux mettre.
    • Pourquoi la variable $myUserName n'est pas initialisée ? Ca ne risque pas de marcher.

  13. #13
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Fused Voir le message
    Sans avoir tout relu votre discussion, juste comme ça dans ta fonction configure()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $this->setDefaults(array(
    	// 'pseudo' => '$myUserName',
    	// 'email' => '$sf_user->getEmailAddress();',
    ));
    • Pourquoi '$myUserName' et '$sf_user->getEmailAddress();' entre cotes ? Ce sont des variables PHP que tu veux mettre.
    • Pourquoi la variable $myUserName n'est pas initialisée ? Ca ne risque pas de marcher.
    Comme je le disais, cette partie est fausse et donc ne fonctionne pas. J'ai fait plusieurs essais et je n'arrive pas à initialiser ces variables.
    Si je supprimes les quotes la fonction plante et je ne peux pas initialiser ces variables à l'extérieur du setDefaults(), ça plante également.

  14. #14
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Ok, c'est un peu plus claire.

    Je persiste à considérer que la meilleur solution serait d'étendre la table sfGuardUser soit directement, soit par héritage (ce qui a ma préférence).

    Pour réaliser ce que tu veux mettre en place, dans le contrôleur (executeNew ou similaire) tu vas préparer ton form en le liant à un enregistrement vierge de la table profil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->form = new profilForm( new profil);
    Le "truc" est de peupler cet enregistrement vierge avec les données que tu souhaites.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $guardUser = $this->getUser()->getGuardUser();
    $newProfil = new profil;
    $newProfil
              ->setId( $guardUser->getId )
              ->setUsername( $guardUser->getFirstName() . ' ' . $guardUser->getLastName() );
    $this->form = new profilForm( $newProfil );
    Attention ! ce code n'est ni vérifié ni validé, les nom des méthodes son sorties de mémoires et doivent être vérifiées. Il n'est la que pour servir d'inspiration.

    Ainsi, ton objet vierge est déjà partiellement rempli et les données cachées sont bien gérée.

  15. #15
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Merci, je vais tester ça dès demain.

    Concernant l'extension de la ctable sfGuardUser par héritage, j'y songe également.

    Je reviendrai donner mon résultat .

  16. #16
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Merci Michel, ça m'a bien aidé. Et j'ai d'ailleurs mieux compris le message de fused au début.

    Maintenant j'ai d'autres questions toujours en lien avec les formulaires.

    1°)
    J'ai ça aujourd'hui :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      public function executeNew(sfWebRequest $request)
      {
        $guardUser = $this->getUser();
     
    	$newUtilisateur = new utilisateur;
     
    	$newUtilisateur->setPseudo( $guardUser->getUsername() );
    	// $newUtilisateur->setEmail( $guardUser->getEmailAddress() );
     
    	$this->form = new utilisateurForm($newUtilisateur);
      }
    La méthode setPseudo() avec un getUsername() fonctionne parfaitement, mais la méthode getEmailAddress() ne fonctionne pas. Ni si je mets getFirstName() ou getLastName()... Pourtant elles existent bien...


    2°)
    De plus, comment faire dans un cas plus général, où je ne veux pas récupérer un sfGuardUser mais un autre type d'objet (par exemple ce que moi j'ai défini comme un utilisateur) ?
    Je viens de valider un form (et peupler entièrement un enregistrement de ma table), et je suis basculé sur un autre form pour un autre type d'enregistrement. Or je voudrais garder "en mémoire" les infos de l'enregistrement précédent.
    Cela doit se passer à quel niveau ?
    Je modifie le contrôleur ? l'appel à ce contrôleur ?

  17. #17
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Corée

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2008
    Messages : 253
    Points : 122
    Points
    122
    Par défaut
    Hellblow,

    Pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $guardUser->getEmailAddress()
    Je me demande si ton guardUser en est vraiment un ?
    Tu n'as pas fais d'héritage ?

    Sinon, peut-être ta version de de sfGuard... je crois qu'il n'y avait pas de mail avant, affiche ton objet avec un print_r() bourrin et regarde dans ta base de donnée si tu as bien ce champ !

    Concernant ta deuxième question :

    Si tu as généré ton code automatiquement par symfony, il t'a généré une fonction executeCreate appelée une fois le formulaire validé.

    Cette fonction appelle la fonction processForm() dont voici un extrait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if ($form->isValid())
        {
          $monObjet= $form->save();
     
          $this->redirect('monmodule/edit?id='.$monObjet->getId());
        }
    C'est assez clair, ici tu peux rediriger l'action qui suit l'enregistrement de ton formulaire.

    Dans ton cas, je ne comprends pas vraiment ce que tu veux dire par garder en mémoire.

    Sur tout ce que je viens de montrer, tu peux facilement manipuler monObjet avant la redirection vers une autre page.

    Le mettre en variable de session par exemple ?

    A toi de voir !

  18. #18
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Fused Voir le message
    Pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $guardUser->getEmailAddress()
    Je me demande si ton guardUser en est vraiment un ?
    Tu n'as pas fais d'héritage ?

    Sinon, peut-être ta version de de sfGuard... je crois qu'il n'y avait pas de mail avant, affiche ton objet avec un print_r() bourrin et regarde dans ta base de donnée si tu as bien ce champ !
    J'ai résolu ce problème, merci beaucoup.
    En fait, en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $guardUser->getGuardUser()->getEmailAddress()
    cela fonctionne. Mais je ne comprends pas trop pourquoi je dois rappeler getGuardUser()... Dans ma class myUser j'ai bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class myUser extends sfGuardSecurityUser { }

    Citation Envoyé par Fused Voir le message
    Concernant ta deuxième question :

    Si tu as généré ton code automatiquement par symfony, il t'a généré une fonction executeCreate appelée une fois le formulaire validé.

    Cette fonction appelle la fonction processForm() dont voici un extrait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if ($form->isValid())
        {
          $monObjet= $form->save();
     
          $this->redirect('monmodule/edit?id='.$monObjet->getId());
        }
    C'est assez clair, ici tu peux rediriger l'action qui suit l'enregistrement de ton formulaire.

    Dans ton cas, je ne comprends pas vraiment ce que tu veux dire par garder en mémoire.

    Sur tout ce que je viens de montrer, tu peux facilement manipuler monObjet avant la redirection vers une autre page.

    Le mettre en variable de session par exemple ?

    A toi de voir !
    Ok, je vais tester ça, ça me semble clair

  19. #19
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Le sfGuardSecurityUser étend le sfBasicSecurityUser en en conservant la structure. Les données de l'utilisateur sfGuardUser ne font pas partie des données de base.

    Ensuite, quant tu fait un getGuardUser, tu obtiens un objet du modèle en retour, qui peut être modifier et sauvegardé.

    Attention, cela génère une requête SQL (pour la première demande dans la session, ensuite il ne retourne qu'un pointeur vers l'objet qui reste donc unique).

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/06/2015, 14h16
  2. [AC-2013] remplissage auto d'un champ
    Par arnonat dans le forum Access
    Réponses: 2
    Dernier message: 13/05/2015, 11h16
  3. Remplissage auto d'un champ
    Par lefabe dans le forum VBA Access
    Réponses: 2
    Dernier message: 27/09/2013, 15h23
  4. Réponses: 1
    Dernier message: 09/10/2009, 09h45
  5. [Débutant] Remplissage auto. d'un sous-formulaire.
    Par Cyphen dans le forum Access
    Réponses: 11
    Dernier message: 20/06/2008, 15h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo