Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/04/2011, 12h14   #1
Futur Membre du Club
 
Homme Mickael
Étudiant
Inscription : novembre 2008
Messages : 66
Détails du profil
Informations personnelles :
Nom : Homme Mickael
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2008
Messages : 66
Points : 15
Points : 15
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 :
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.
mixka13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 13h02   #2
Futur Membre du Club
 
Homme Mickael
Étudiant
Inscription : novembre 2008
Messages : 66
Détails du profil
Informations personnelles :
Nom : Homme Mickael
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2008
Messages : 66
Points : 15
Points : 15
Bon, j'ai trouvé une solution à mon problème, il s'agit du code suivant :
Code :
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.
mixka13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2011, 13h28   #3
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
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 !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2011, 11h50   #4
Futur Membre du Club
 
Homme Mickael
Étudiant
Inscription : novembre 2008
Messages : 66
Détails du profil
Informations personnelles :
Nom : Homme Mickael
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2008
Messages : 66
Points : 15
Points : 15
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 :
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?
mixka13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2011, 15h53   #5
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
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 !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 14h38   #6
Candidat au titre de Membre du Club
 
Homme
Étudiant
Inscription : juillet 2008
Messages : 48
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 23
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2008
Messages : 48
Points : 13
Points : 13
Envoyer un message via MSN à Passarinho44
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
Passarinho44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h11.


 
 
 
 
Partenaires

Hébergement Web