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 :

EmbedRelation erreur de validation


Sujet :

Symfony PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 131
    Par défaut EmbedRelation erreur de validation
    Bonjour,

    j'ai un problème avec un formulaire et des relations embarquées de type many to many. Les relation s'affichent correctement. Lorsque j'essaye de valider pour modification le formulaire principal, j'ai des erreurs de validation comme si les champs de mes embedded relations n'étaient pas renseignés.

    Voici des extraits de code :

    Mon formulaire principal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Les blessures déjÃ* affectées
    if (!$this->isNew()) {
    	$this->embedRelation('Affecter');
    }
    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
    //Mon template du formulaire principal, a l'endroit où j'affiche mes embedded relations
      <?php if(isset($form['Affecter']) && count($form['Affecter']) > 0){ ?>
    		    <fieldset>
    		    	<legend>Blessures déja ajoutées</legend>
     
    		    	 <?php $affecterForm = $form->getEmbeddedForm("Affecter") ?>
    		    	 <?php $embeddedForms = $affecterForm->getEmbeddedForms() ?>
    				 <?php foreach($embeddedForms as $e): ?>
     
    						 <ul class="relation">
    				    		<li class="titreForm">Blessure : </li>
    					    			<li>
    						    			<span>
    											<?php echo $e['idlesion']->renderLabel(); ?>
    											<?php echo $e['idlesion']->renderHelp() ?>
    											<?php echo $e['idlesion']->hasError() ? ' <span style="color: Red;">'.$e['idlesion']->getError().'</span>' : '' ?>
    										</span>
    							    			<?php echo $e['idlesion']->render() ?>
    							    	</li>
     
    							    	<li>
    						    			<span>
    											<?php echo $e['idsiegelesion']->renderLabel(); ?>
    											<?php echo $e['idsiegelesion']->renderHelp() ?>
    											<?php echo $e['idsiegelesion']->hasError() ? ' <span style="color: Red;">'.$e['idsiegelesion']->getError().'</span>' : '' ?>
    										</span>
    							    			<?php echo $e['idsiegelesion']->render() ?>	
    							    	</li>	
     
    							    	<li>
    						    			<span>
    											<?php echo $e['idcotelesion']->renderLabel(); ?>
    											<?php echo $e['idcotelesion']->renderHelp() ?>
    											<?php echo $e['idcotelesion']->hasError() ? ' <span style="color: Red;">'.$e['idcotelesion']->getError().'</span>' : '' ?>
    										</span>
    							    			<?php echo $e['idcotelesion']->render() ?>	
    							    	</li>
    							    	<li>
    							    		<?php echo link_to('Supprimer', 'declaration/delete_blessure?iddeclaration='.$form->getObject()->getIddeclaration().'&id='.$e->getObject()->getId(), array('method' => 'delete', 'confirm' => 'Etes vous s&ucirc;r(e) ?')) ?>
    							    	</li>		
    				    		</ul>
    				    	<?php echo $e->renderHiddenFields();?>
    				<?php endforeach ?>
    			</fieldset>
    		<?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
    // Mon formulaire embarqué :
    class AffecterForm extends BaseAffecterForm
    {	
      public function configure()
      { 
     
           $this->setWidgets(array(
     
                          'idlesion'      => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('Lesion'), 'add_empty' => true)),
                          'idsiegelesion' => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('SiegeLesion'), 'add_empty' => true)),
                          'idcotelesion'  => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('CoteLesion'), 'add_empty' => true)),
                          'iddeclaration' => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('Declaration'), 'add_empty' => true)),
           ));
     
    	  $this->widgetSchema['iddeclaration'] = new sfWidgetFormInputHidden();
     
          $this->setValidators(array(
     
                'idlesion'      => new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('Lesion'), 'column' => 'idlesion', 'required' => true)),
                'idcotelesion'  => new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('CoteLesion'), 'column' => 'idcotelesion', 'required' => true)),
                'idsiegelesion' => new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('SiegeLesion'), 'column' => 'idsiegelesion', 'required' => true)),
                'iddeclaration' => new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('Declaration'), 'column' => 'iddeclaration', 'required' => false)),
     
          ));
     
          $this->widgetSchema->setLabels(array(
                                                   'idlesion' => 'L&eacute;sion',
                                                   'idsiegelesion' => 'Si&egrave;ge de la l&eacute;sion',
                                                   'idcotelesion' => 'C&ocirc;t&eacute;',
                                                   'iddeclaration' => 'D&eacute;claration',
          ));
     
     
          $this->widgetSchema->setNameFormat('affecter[%s]');
        $this->widgetSchema->setNameFormat('affecter_filters[%s]');
        $this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);
     
    }
    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
    //Mon yaml de la relation embarquée :
    Affecter:
      connection: doctrine
      tableName: Affecter
      columns:
        idlesion:
          type: integer(4)
          notnull: true
        idcotelesion:
          type: integer(4)
          notnull: true
        idsiegelesion:
          type: integer(4)
          notnull: true
        iddeclaration:
          type: integer(4)
          notnull: true
      relations:
        Lesion:{onDelete: CASCADE, local:idlesion, foreign: idlesion}
        CoteLesion:{onDelete: CASCADE, local:idcotelesion, foreign: idcotelesion}
        SiegeLesion:{onDelete: CASCADE, local:idsiegelesion, foreign: idsiegelesion}
        Declaration:{onDelete: CASCADE, local: iddeclaration, foreign: iddeclaration}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //Un extrait du yaml de mon Objet principal (celui du formulaire principal) :
     relations:
        Affecters:
          class: Affecter
          refClass: Affecter
          local: iddeclaration
          foreign: iddeclaration
    A la validation du formulaire principal, j'ai les erreurs de validation suivantes :

    0 [idlesion [Ce champ est requis.] idcotelesion [Ce champ est requis.] idsiegelesion [Ce champ est requis.]]

    La particularité de ma relation est qu'elle fait appel à des tables liées : lesion, cotelesion et siegelesion

    Quelqu'un aurait une idée ?

    Merci beaucoup !

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 131
    Par défaut
    J'ai trouvé une solution, mais elle est pas jolie :

    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
     <?php $affecterForm = $form->getEmbeddedForm("Affecter") ?>
    		<?php $embeddedForms = $affecterForm->getEmbeddedForms() ?>
     
    	    <?php if(isset($form['Affecter']) && count($form['Affecter']) > 0){ ?>
    	    	<?php $i = 0; ?>
    		    <fieldset>
    		    	<legend>Blessures déja ajoutées</legend>
     
    		    	 <?php foreach ($form['Affecter'] as $i => $e) { ?>
    		    	 	    <?php $embeddedFormObject = $embeddedForms[$i]; ?>
    						 <ul class="relation">
    				    		<li class="titreForm">Blessure : </li>
    					    			<li>
    						    			<span>
    											<?php echo $e['idlesion']->renderLabel(); ?>
    											<?php echo $e['idlesion']->renderHelp() ?>
    											<?php echo $e['idlesion']->hasError() ? ' <span style="color: Red;">'.$e['idlesion']->getError().'</span>' : '' ?>
    										</span>
    							    			<?php echo $e['idlesion']->render() ?>
    							    	</li>
     
    							    	<li>
    						    			<span>
    											<?php echo $e['idsiegelesion']->renderLabel(); ?>
    											<?php echo $e['idsiegelesion']->renderHelp() ?>
    											<?php echo $e['idsiegelesion']->hasError() ? ' <span style="color: Red;">'.$e['idsiegelesion']->getError().'</span>' : '' ?>
    										</span>
    							    			<?php echo $e['idsiegelesion']->render() ?>	
    							    	</li>	
     
    							    	<li>
    						    			<span>
    											<?php echo $e['idcotelesion']->renderLabel(); ?>
    											<?php echo $e['idcotelesion']->renderHelp() ?>
    											<?php echo $e['idcotelesion']->hasError() ? ' <span style="color: Red;">'.$e['idcotelesion']->getError().'</span>' : '' ?>
    										</span>
    							    			<?php echo $e['idcotelesion']->render() ?>	
    							    	</li>
    							    	<li>
    							    		<?php echo link_to('Supprimer', 'declaration/delete_blessure?iddeclaration='.$form->getObject()->getIddeclaration().'&id='.$embeddedFormObject->getObject()->getId(), array('method' => 'delete', 'confirm' => 'Etes vous s&ucirc;r(e) ?')) ?>
    							    	</li>		
    				    		</ul>
    				    	<?php echo $e->renderHiddenFields();?>
    				    	<?php $i++; ?>
    				<?php } ?>
    			</fieldset>
    		<?php } ?>

Discussions similaires

  1. [W3C] Erreurs de validation incompréhensibles
    Par brotelle dans le forum Balisage (X)HTML et validation W3C
    Réponses: 21
    Dernier message: 12/05/2006, 12h03
  2. [W3C] erreur de validation W3C HTML 4.01 Transitional
    Par durand2504 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 14/03/2006, 10h47
  3. [debutant] erreur de validation DTD/schema
    Par loic_86 dans le forum Valider
    Réponses: 1
    Dernier message: 13/01/2006, 22h04
  4. [DOM] Erreur pour valider une DTD
    Par lenghh dans le forum Format d'échange (XML, JSON...)
    Réponses: 13
    Dernier message: 19/05/2004, 18h15

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