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, 11h38   #1
Invité de passage
 
Inscription : juin 2008
Messages : 40
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 40
Points : 2
Points : 2
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 :
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 :
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 :
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 :
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
Djillian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2011, 12h15   #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
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.
__________________
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 04/04/2011, 10h39   #3
Invité de passage
 
Inscription : juin 2008
Messages : 40
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 40
Points : 2
Points : 2
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
Djillian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 10h47   #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
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 :
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.
__________________
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 04/04/2011, 11h00   #5
Invité de passage
 
Inscription : juin 2008
Messages : 40
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 40
Points : 2
Points : 2
J'ai fait la modif que tu m'as indiqué qui doit marché normalement.

Code :
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 :
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();	
	}
Djillian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 16h55   #6
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
Autant pour moi :
Code :
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 .
__________________
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 04h09.


 
 
 
 
Partenaires

Hébergement Web