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 :

Valeur d'un champ de formulaire pour concaténation [1.x]


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Valeur d'un champ de formulaire pour concaténation
    Bonjour,

    J'ai rajouté a un formulaire un champ input (qui donc n'a pas de set/get dans le modèle)

    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
     
    //lib/form/doctrine/base/BasePlainteForm.class.php
     
    abstract class BasePlainteForm extends BaseFormDoctrine
    {
      public function setup()
      {
        $this->setWidgets(array(
        //........
          'plainte_pos_comp' 	    => new sfWidgetFormInputText(),
        ));
     
        $this->setValidators(array(
        //......
          'plainte_pos_comp'            => new sfValidatorString(array('required' => false)),
        ));
    Je souhaite concatener sa valeur a un élément qui lui est dans le modèle (j'ai pensé par passé par le setter donc dans la méthode save() de la classe)

    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
     
    //lib/modele/doctrine/Plainte.class.php
     
    class Plainte extends BasePlainte
    {
    	public function save(Doctrine_Connection  $conn = null)
    	{
    	  $this->setPlaintePos(/*A PLACER ICI LE CONTENU DU CHAMP*/",".$this->getPlaintePos());
     
    	  return parent::save($conn);
    	  $conn -> commit();
     
    	}
     
    }
    Mais je n'arrive pas a récupérer le contenu, j'ai essayé avec getValue(), mais symfony me retourne un msg d'erreur et me dit qu'il ne connais pas cette méthode.

    Si quelqu'un a une solution je le remercie d'avance =)

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 136
    Points : 576
    Points
    576
    Par défaut
    Tu devrais plutôt surcharger la méthode "processValues".
    Un lien vers l'api : http://www.symfony-project.org/api/1..._processvalues

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Merci Tonio de me répondre.

    Oui c'est peut etre mieux d'utiliser cette méthode, mais mon problème c'est surtout comment récupérer la valeur du champ de formulaire avant la sauvegarde alors qu'il n'est pas dans le modèle (Sans setPlaintePosComp() et getPlaintePosComp() ) comme j'ai rajouté le champ manuellement dans le fichier BasePlainteForm.class.php

  4. #4
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    J'ai regardé un peu sur les forums et j'ai trouvé la solution avec la methode proccessValues()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //lib/form/doctrine/PlainteForm.class.php
     
     public function processValues($values)
      {
        $values = parent::processValues($values);
     
        $values['plainte_pos'] =$values['plainte_pos_comp']. ",".$values['plainte_pos'];
     
        return $values;
     
      }
    Merci bien! =)

  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
    ATTENTION !!!

    Dans ton premier poste tu parles de modifications apportées au form
    lib/form/doctrine/base/BasePlainteForm.class.php
    hors cet objet est régénère (supprimé et réécris) à chaque re build de la base. Il ne faut jamais le modifier.

    Transferts tes modifications dans la méthode configure() de l'objet
    lib/form/doctrine/PlainteForm.class.php
    qui, lui, n'est généré qu'une fois et est destiné à recevoir ces modifications.

    L'utilisation de la méthode proccessValue() peut être pratique si tu considères qu'il n'y a qu'un formulaire qui puisse apporter cette donnée et qui donc nécessitera ce traitement.

    Personnellement, je préfère modifier l'objet du modèle, dans ton cas probablement :
    lib/model/doctrine/plainte.class.php
    et lui adjoindre une méthode getPlaintePosComp()

    Par contre, j'ai un peu de mal a voir la justification au niveau de la structure de la base de deux données fusionnées dans un seul champ. Et surtout comment vont-elles survivre à une deuxième modification ? Doit-tu les désassembler ?

  6. #6
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    a oui j'avais pas pensé a ca! Tu fait comment pour déclarer un champ input dans le configure()?

    Pour repondre a ta question concernant la base de donnée, je développe un backend qui doit se greffer sur une bade de donnée deja existante et utilisée, du coup je ne peux pas la modifier et je dois l'utiliser tel quel!
    Je doit effectivement désassembler la valeur du champ! Je me suis pas encore attaquer a ce problème!

  7. #7
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    J'ai bon j'ai trouvé tout seul comme un grand (c'etais pas tres dur)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      public function configure()
      {
    //...
    	$this->widgetSchema['plainte_pos_comp'] = new sfWidgetFormInputText();
    	$this->validatorSchema['plainte_pos_comp'] =new sfValidatorString();
    //...
    }
    Merci pour cette précision mimi, j'avais zappé la regénération des objets!

  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
    En fait la fonction __construc() de l'objet form fait appel aux méthodes : setup() puis configure().

    La méthode configure() n'est jamais appelée avant qu'elle ne soit définie au dernier niveau, ton niveau. Ce qui permet de ne pas avoir a jouer avec un éventuel parent::

    Bonne chance,
    Michel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/03/2007, 22h03
  2. Récupérer la valeur d'un champ de formulaire
    Par pp51 dans le forum Langage
    Réponses: 10
    Dernier message: 08/08/2006, 22h23
  3. Valeur d'un champ de formulaire dans un mail
    Par Guranga dans le forum IHM
    Réponses: 2
    Dernier message: 08/06/2006, 12h57
  4. Réponses: 5
    Dernier message: 24/05/2006, 14h04
  5. valeur d'un champ de formulaire ajouté depuis une autre page
    Par manaboko dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 01/12/2005, 09h29

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