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 :

[symfony 1.4.x][propel] Formulaires imbriqués


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 51
    Par défaut [symfony 1.4.x][propel] Formulaires imbriqués
    Bonjour,

    Je reviens une fois de plus pour un problème dans un développement symfony.

    J'essaye de créer un formulaire imbriquer, mais je n'arrive pas a trouver une doc précise.

    Mon premier formulaire :

    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
    18
    19
    20
    21
     
    class SmslistForm extends BaseSipsmslistForm
    {
      public function configure()
      {
    	unset ($this['id_list'],$this['User_id']);
     
    	$this->widgetSchema['nom_list']= new sfWidgetFormPropelChoice(array(
    														'model' => 'Sipsmslist',
    														'add_empty' => false,
    														)); 
     
    	$this->widgetSchema->setHelp('nom_list',"Veuillez selectionnez une liste d'envoi.");
     
    	$this->widgetSchema->setLabels(array(
    		  "nom_list"=> 'Liste',
    			));
     
    	$this->widgetSchema->setNameFormat('sipSmslist[%s]');	
      }
     }
    Mon deuxième formulaire avec appel du premier :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
     
    class SmsmultiForm extends BaseSipsmsForm
    {
      public function configure()
      {
    	parent::configure();
    	unset ($this['user_id'],$this['Num_envoi'],$this['id'],$this['date_envoi']);
     
    	$this->embedForm ('Smslist', new SmslistForm());
     
    	$this->setWidgets(array(
    		  "Text_sms"=> new sfWidgetFormTextarea(),
    		));
     
    	$this->widgetSchema->setHelp('Text_sms',"Le sms ne doit pas exceder 1600 caractères.");
     
    	$this->widgetSchema->setLabels(array(
    		  "Text_sms"=> 'Message',
    			));
     
    	$this->widgetSchema->setNameFormat('sipSms[%s]');	
     
    		$this->setValidators(array(
    			"Text_sms"=>new sfValidatorString(array('required'=>true,'min_length'=>1,'max_length'=>1600),
    				array('min_length'=>'Le message est trop court',
    					  'max_length'=>'Le message est trop long',
    					  'required'=>'Un message est requis',
    					  )),		  
    				));
      }
     }
    Ma fonction d'appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	public function executeInfosmsmulti(sfWebRequest $request)
    	{
    		$this->profile = sfGuardUserProfilePeer::getByID($this->getUser()->getId());
    		$this->form = new SmsmultiForm();	
    	}
    Et mon _Form.php

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
     
    <?php use_stylesheets_for_form($form) ?>
    <?php use_javascripts_for_form($form) ?>
    <div id="sous_contenu_bleu">
    <form action="<?php echo url_for('account/sendsmsmulti') ?>" method="post" <?php $form->isMultipart() and print 'enctype="multipart/form-data" ' ?>>
    		<div align="center">
    			<table width="95%" cellspacing="0" cellpadding="2">
    				<?php if ($form->hasGlobalErrors()){?>			
    						<tr>
    							<td colspan="2" class="tabcel2">
    								<?php Foreach ($form->getGlobalErrors() as $name=>$error){?>
    								<h3 align="center"><strong><?php echo $error." ".$name ?></strong></h3>
    								<?php } ?>	
    							</td>
    						</tr>
    					<?php } ?>	
    				<tr>
    					<td colspan="2" class="tabcel2">
    						<h3 align="center"><strong>Composer votre Message</strong></h3>
    					</td>
    				</tr>
    				<tr>
    					<td width="28%" class="tabcel1">
    						<div align="right">
    							<?php echo $form['nom_list']->renderLabel();?>
    							<br/><?php echo $form['nom_list']->renderHelp();?>
    						</div>	
    					</td>
    					<td width="72%" class="tabcel1">
    						<?php echo $form['nom_list']->render(array("style" => "width: 100px; height: 20px;"));?><?php echo $form['nom_list']->getError();?>
    					</td>
    				</tr>
    				<tr>
    					<td width="28%" class="tabcel1">
    						<div align="right">
    							<?php echo $form['Text_sms']->renderLabel();?>
    							<br/><?php echo $form['Text_sms']->renderHelp();?>
    						</div>	
    					</td>
    					<td width="72%" class="tabcel1">
    						<?php echo $form['Text_sms']->render(array("style" => "width: 200px; height: 100px;", "id" => "LgntSMS"));?><?php echo $form['Text_sms']->getError();?>
    					</td>
    				</tr>
    				<?php echo $form['_csrf_token']->render()?>
    				<tr>
    					<td colspan="2" class="tabcel2">
    						<div align="center">
    							<input type="submit" value="Envoyer votre message" />
    						</div>
    					</td>
    				</tr>
     
    			</table>
    		</div>
    	<script type="text/javascript" src="functions.js"></script>
    	</form>
    </div>
    Il me retourne cet erreur :

    Widget "nom_list" does not exist.

    Alors qu'il devrait le trouver, vu qu'il est passé du premier formulaire au deuxième.

    Si quelqu'un a une idée, ça m'avancerait grandement.

    Merci d'avance

  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
    Ton Widget s'appel Smsliste.

    Il faut donc, pour afficher ce qu'il y a dedans (plusieurs enregistrements possibles) faire une boucle (foreach) sur ce widget.

  3. #3
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 51
    Par défaut
    Je vois pas ou je doit faire ma boucle.

    Je supose que ça doit être dans _form3.php, avant l'affichage du widget, et que ça doit être un truc du style foreach ($smslist as $smslist) mais j'obtient quand même une erreur, $ smslist etant non déclaré -__-'

    Dsl de faire mon noob

  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
    Dans le template idione. A priori d'après l'exemple donné par toi _form.php, je ne sais pas ce qu'est _form3.php


    Le code doit ressembler à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php foreach ($Smslist as $row): ?>
      <.php echo $row->render ?>
    <?php endforeach ?>
    Tu peux bien sur détailler l'affichage d'une ligne.

  5. #5
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 51
    Par défaut
    J'ai fait la modif que tu m'as indiqué qui doit marché normalement.

    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
     
    <?php Foreach ($Smslist as $row){
    	echo'<tr>
    		     <td width="28%" class="tabcel1"><div align="right">';
    		          echo $form['nom_list']->renderLabel();
    		          echo'<br/>';
    		          echo $form['nom_list']->renderHelp();
    		          echo '</div>	
    		     </td>
    		     <td width="72%" class="tabcel1">';
    			  echo $form['nom_list']->render(array("style" => "width: 100px; height: 20px;"));
    			  echo $form['nom_list']->getError();
    			  echo '
                        </td>
    		</tr>';
    	}?>
    Mais $Smslist est non déclaré, et je sais pas comment la déclaré :-(

    J'ai tenté de la déclaré dans la fonctiond 'appel de la page , mais ça ne fonctione pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	public function executeInfosmsmulti(sfWebRequest $request)
    	{
        $this->profile=sfGuardUserProfilePeer::getByID($this->getUser()->getId());
    		$this->Smslist = new SmslistForm();
    		$this->form = new SmsmultiForm();	
    	}

  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
    Autant pour moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php foreach ($form['Smslist'] as $row): ?>
      <?php echo $row->render ?>
    <?php endforeach ?>
    Et dans les templates, il ne doit pas y avoir de code php de plus d'une ligne... Donc pas de { et de echo après au millieu de lignes, cela rend le template illisible et est source potentiel d'erreurs .

Discussions similaires

  1. [2.x] [Symfony 2.6] Persister des formulaires imbriqués
    Par Kevfou dans le forum Symfony
    Réponses: 27
    Dernier message: 18/05/2015, 21h07
  2. [1.x] formulaire imbriqués symfony version 1.1.6
    Par bellilo dans le forum Symfony
    Réponses: 2
    Dernier message: 30/03/2009, 02h36
  3. 2 formulaires imbriqués
    Par Invité dans le forum Langage
    Réponses: 16
    Dernier message: 11/05/2006, 08h54
  4. formulaires imbriqués
    Par Nounoursonne dans le forum Langage
    Réponses: 34
    Dernier message: 18/11/2005, 14h18
  5. probleme deux formulaires imbriqués
    Par rony dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 21/06/2005, 18h19

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