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 :

Action déclanchée par un formulaire


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 73
    Par défaut Action déclanchée par un formulaire
    Bonjour,

    Je galère sur un truc à la c...
    J'ai un formulaire qui fonctionne et qui peuple une table de Contact:
    id
    nom
    prenom etc...

    lorsque je valide ce formulaire, la table contact se rempli sans souci.
    Mais j'aimerai qu'en même temps, je puisse crée une autre entrée dans une table Card:
    id
    contact_id (en relation avec la table contact)
    card_number
    etc...

    C'est-à-dire que pour chaque nouvel inscrit je veux associer une carte (bien sûr seulement si c'est un nouvel inscrit, pas sur un update).
    Je ne sais pas comment faire, ni où.
    J'essaie de surcharger la méthode save() de la classe contact, mais ça ne fonctionne pas, je n'arrive pas à récupérer l'id du contact.

    Avez-vous une idée? je suis sur sf 1.2
    Ca parait basique.

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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
    Par défaut
    Tu es sur la bonne route.

    C'est dans la surcharge de la méthode save() de ta table Contact que je travaillerais aussi.

    Par contre, tu ne peux pas utiliser l'Id de ton nouvel user avant qu'il ne soit sauvegardé. La solution est de commencer par un parent::save() en début de ta méthode, après ceci ton objet contact existe et tu as accès à Id. Tu peux ainsi tous simplement créer un objet Card, dans l'idée un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    card = new card;
    cart->setCardNumber('123')->
        setAutreChamp('autre')->
        setContact($this)->
        sauve();
    La méthode Contact (où contact est le nom de ta relation entre card et contact du côté de card) prend un objet et pas un Id, ce qui permet d'être plus propre dans le code.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 73
    Par défaut
    Merci mimi.

    C'est exactement ce que je m'étais dit : il commencer par sauver le contact.
    Mais comme un idiot j'avais écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return parent::save($connect)
    Et donc le return me faisait sortit de la fonction surchargée...

    Sinon j'avais un problème pour déterminer si le contact était créé ou mis-à-jour.
    En fait, j'ai tout résolu comme suit :
    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
     
    public function save(Doctrine_Connection $conn = null)
    	{
     
    		$new_contact = $this->isNew();
     
    		parent::save($conn);
     
      		if($new_contact)
      		{
    		  	$card = new Card();
    		  	$card->setContact($this);
    		  	$card->setNumber('xxxx');
    		  	$card->setSerialNumber('xxxx');
    		  	$card->save();
      		}
    	}
    Ca semble correct, non? En tout cas les premiers tests sont concluants.

  4. #4
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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
    Par défaut
    Avec un peu plus de temps je me suis replongé dans un vieux code, et j'ai presque la même chose.

    Sauf que j'ai fais un test sur le isnew() et deux fois un parent::save()...

    Et tu peux rentre ton code plus fluide en l'écrivant de la manière suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $card = new Card();
    $card->
            setContact($this)->
            setNumber('xxxx')->
            setSerialNumber('xxxx')->
            save();
    Mais cela ne change rien à la validité du code. Et je ne suis même pas sur que cela change quelque chose à la rapidité.

    Bonne chance pour la suite

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 73
    Par défaut
    Merci pour tes conseils Mimi.

    Tu vas rire (peut-être pas), mais en fait je ne vais pas faire comme cela.
    Je vais plutôt :
    - envoyer un mail de confirmation d'inscription,
    - attendre que l'utilisateur confirme en cliquant sur un lien,
    - et alors générer une carte.

    Sinon j'ai peu que ma base soit polluée.

    Mais en tout cas, je sûr que ça me servira plus tard.

    Tu connais la différence entre save() et doSave()?
    J'entrevois mal la subtilité.

  6. #6
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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
    Par défaut
    On m'a communiqué le lien sur un pdf qui décrit les appels de fonctions dans l'objet form il est dommages que ces informations ne soient pas plus facillement accessible, il est très intéressant pour tous ceux qui utilisent les forms (tous).

    Il devrait répondre à ta question.

    Je ne saisi pas bien les liens et obligations entre tes différentes tables, mais je pense, en effet, qu'il n'est pas nécessaire de créer tous l'infrastructure autour d'un compte tant que celui-ce n'a pas été validé par un retour d'email.

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/02/2009, 07h22
  2. Réponses: 5
    Dernier message: 30/08/2006, 12h04
  3. [formulaire] Modifier l'action engendrée par la touche [Entrée]
    Par FrankOVD dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 12/05/2006, 16h58
  4. Réponses: 5
    Dernier message: 27/12/2004, 00h38
  5. Réponses: 4
    Dernier message: 18/09/2003, 10h06

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