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 26/06/2011, 00h33   #1
Membre à l'essai
 
Homme
Développeur Web
Inscription : avril 2011
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2011
Messages : 40
Points : 23
Points : 23
Par défaut Assigner valeur par défaut à un champ cacher pour des embed forms

Bonjour,
Encore un soucis avec l'utilisation de Symfony Je vais essayer de m'exprimer clairement ^^.

Donc voilà, j'ai mon formulaire Equipement. Dans ce formulaire, j'ai des champs cachés comme par exemple le Dcreat et le Ucreat.

Lors de mon affichage de donnée, je prédéfinis les valeurs de ces champs cachés avec ce bout de code :

Code :
1
2
3
4
5
$form->setdefault('dcreat', date('d-m-Y H:i:s')); 
    		 	  echo $form['dcreat'];
 
    		      $form->setdefault('ucreat', $sf_user->getAttribute('initiale')); 
    		 	  echo $form['ucreat'];
Jusqu'ici, aucun problème, ca marche sans problème, quand j'enregistre mon formulaire j'ai bien la date et les initiales de l'utilisateur enregistré en base de donnée pour mon équipement.

Là où ca se complique, c'est que j'ai crée en Ajax, l'ajout de plusieurs lignes d'équipement. Ca me permet d'insérer des formulaires imbriquées dans mon formulaire principale. Mon soucis est, comment puis-je faire pour enregistrer la date Dcreat de mes formulaires imbriquées ?

Le code donnée ci-dessus, ne sert que pour mon formulaire principale.
J'ai déjà essayé :

Code :
1
2
3
4
5
$form->$embedequipement->setdefault('dcreat', date('d-m-Y H:i:s')); 
    		 	  echo $form['dcreat'];
 
    		      $form->$embedequipement->setdefault('ucreat', $sf_user->getAttribute('initiale')); 
    		 	  echo $form['ucreat'];
Mais sans succès. Je ne sais pas si je suis très clair, j'ai essayé de faire au mieux. Une autre solution radicale (et mieux), serais directement dans le formulaire de base de Equipement, de lui dire que Dcreat prend la valeur de la date du jour par exemple. Mais je ne sais pas si c'est possible.

Merci d'avance pour vos réponses
micky86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2011, 21h58   #2
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
Je dirais que tu n'as pas le bon code au bon endroit.

Initialiser ces données dans le template (ce que j'ai compris) est le plus mauvais endroit pour les initialiser.

De plus, je ne vois pas l'intérêt de les faire transiter par le poste utilisateur.

En prime, rien n'interdit à ton utilisateur de modifier son POST avant qu'il ne te soit renvoyé, y compris ces deux champs cachés ! Il peut alors créer un enregistrement anti daté, fait par quelqu'un d'autre...

Réfléchissons, quant as-t'on vraiment besoin de ces données ? Lors de l'enregistrement. En fait, dans l'objet du modèle, juste avant qu'un nouvel enregistrement ne soit créé. Tu as maintenant le lieu et le moment où mettre tes données, à toi de jouer. Et enlèves les du template où elle n'ont rien à faire, ainsi que du DOM ou elles n'ont pas à circuler...
__________________
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 27/06/2011, 09h45   #3
Membre à l'essai
 
Homme
Développeur Web
Inscription : avril 2011
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2011
Messages : 40
Points : 23
Points : 23
Je fais un :
Code :
$this->form->setdefault('dcreat', date('d-m-Y H:i:s'));
lors du create, et cela ne donne rien. Je n'ai aucun message d'erreur et l'enregistrement se fait bien mais sans la date.
micky86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 13h52   #4
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
Si tu es sur un sfFormDoctrine, ls setDefault n'est pas la bonne commande à utiliser pour donner des valeurs par défault.

Il faut créer un enregistrement vierge, lui donner les valeurs et l'utiliser pour initialiser le form.

Dans tous les cas, pour ce que tu veux faire, je maintiens que ce n'est pas la bonne solution et qu'il faut que ton code se trouve dans la méthode perSave() de ton objet du modèle.
__________________
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
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h52.


 
 
 
 
Partenaires

Hébergement Web