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 :

Modification valeurs formulaire après envoie


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2008
    Messages : 71
    Points : 49
    Points
    49
    Par défaut Modification valeurs formulaire après envoie
    Bonjour,

    Voila je galère un peu avec les fonctions de traitement de formulaires, tout les save, doSave, processValue, etc, je ne comprend pas très bien leur fonctionnement, leur ordre d'appel, mais bon...
    Pour le moment je voudrais modifier une valeur d'un formulaire, plus précisement le champs IP d'un formulaire de contact, il est unset à l'affichage, laissé vide avant soumission et ne peut pas être vide en base de données.

    je fais donc comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public function save(Doctrine_Connection $con = null)
      {
        $this->setIp($_SERVER['REMOTE_ADDR']);
        return parent::save($con);
      }
    Mais cela ne marche pas, comment puis je faire.
    Et qui peut m'éclairer sur le fonctionnement, le process des form dans symfony.

    Merci d'avance.

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2008
    Messages : 71
    Points : 49
    Points
    49
    Par défaut
    Bon, j'ai trouvé une solution à mon problème, il s'agit du code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     public function processValues($values)
      {
          $values = parent::processValues($values);
          $values["ip"] = $_SERVER['REMOTE_ADDR'];
          return $values;
      }
    Néanmoins pourrait-on m'expliquer pourquoi mon code précédant ne fonctionne pas (celui avec l'accesseur) alors que j'avais déjà vu cette pratique précédemment et qu'elle fonctionnait.

    processValue est donc la meilleure solution pour éditer les valeurs de champs avant enregistrement en base de données semblerait-il.

  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
    houlala...

    Bon, reprenons au début !

    processValue est la méthode qui permet de "cleanUp", nettoyer les valeurs retournées du formulaire.

    Pour modifier une valeur avant qu'elle ne soit nettoyée il convient de créer une méthode updateXxxxxColumn() ou Xxxxx est le nom de ta donnée. Dans ton cas cela n'a pas beaucoup d'intérêt vu que tu n'as pas de validateur pour l'adresse IP.

    Alors où faire ton traitement ?

    Tous dépend si la valeur doit être modifiée lorsque le formulaire est enregistrée ou lorsque la valeur est enregistrée (quelque soit le formulaire qui en demande la modification).

    Dans le cas d'une modification quelque soit le formulaire il serait plus intéressant de loger ton code dans le save du modèle (table) et pas dans le formulaire.

    Pour le faire dans le formulaire tu peux le faire à deux endroits, dans save ou dans doSave. Save vérifie que le formulaire n'a pas d'erreur, initialise une transaction et exécute doSave.

    Donc dans ton cas où cette valeur doit être modifiée à tout prix, je pense que doSave, dans la transaction me semblerait l'endroit approprié. Mais tu dois y mettre le code que tu as utilisé pour processForm avec le tableau values et pas un setIp qui n'est pas connu dans le form mais dans le modèle.

    Si ce n'est pas trop claire (j'en ai conscience), reviens nous
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2008
    Messages : 71
    Points : 49
    Points
    49
    Par défaut
    ok, c'est bon j'ai effectuer la modification que tu me conseillais, j'ai donc surcharger la fonction doSave de mon formulaire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public function doSave($con = null)
        {
            $ip = $this->getObject()->setIp($_SERVER['REMOTE_ADDR']);
            $username = $this->getObject()->setUsername(strstr($this->getObject()->getEmailAddress(), '@', true));
            return parent::doSave($con);
        }
    Il n'y a qu'une seule chose qui ne fonctionne pas c'est $this->getObject()->getEmailAddress() qui ne retourne rien, pourtant mon champs email n'est pas vide, et même obligatoire.

    une idée?

  5. #5
    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
    getObject() récupère l'objet du modèle. Celui-ci est alimenté par le doSave() parent qui est fait après. Donc il est vide...

    La solution serait de partir de la valeur dans ton form $this->values['email_address'].

    Par contre je ne vois pas trop la destinée de $username...
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 48
    Points : 29
    Points
    29
    Par défaut
    Bonjour,

    Je suis désolé de répondre sur ce thread mais il se rapproche beaucoup de mon problème et je pense que Michel Rotta doit savoir ce qu'il me manque.

    J'utilise aussi un formulaire et souhaite faire des modifications sur les valeurs mais je souhaite les faire au moment de l'affichage du formulaire et non pas au moment de l'enregistrement.
    En gros je voudrais reformater les données reçues de la base de données pour qu'elles s'affichent comme je veux sur mon formulaire.

    J'ai utilisé la fonction updateXxxxColumn pour le faire au moment de l'enregistrement mais je ne sais pas quelle fonction utiliser pour l'affichage.

    Une idée?

    Merci

Discussions similaires

  1. Perte de valeur formulaire aprés message alert
    Par kamnouz dans le forum Langage
    Réponses: 6
    Dernier message: 01/02/2011, 13h47
  2. fermeture d'un formulaire après envoi
    Par speedylol dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/12/2007, 11h47
  3. Raffrachissement du formulaire apres envoi.
    Par Mysti¢ dans le forum Langage
    Réponses: 2
    Dernier message: 03/04/2006, 17h24
  4. vider les donnees formulaire apres envoie
    Par nestam dans le forum Général JavaScript
    Réponses: 30
    Dernier message: 20/03/2006, 14h59
  5. [MySQL] vider formulaire apres envoi
    Par nestam dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 31/10/2005, 15h29

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