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

 PHP Discussion :

formulaire composé de plusieurs composants


Sujet :

PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juin 2006
    Messages : 52
    Par défaut formulaire composé de plusieurs composants
    Bonjour, je débute avec le framework symfony et je suis actuellement en train de faire un formulaire assez imposant pour générer des pubs de ce fait j'ai décidé de le séparer en plusieurs composants. Le problème que je rencontre viens dans la phase de vérification, lors de ma validation je fais appel a une méthode executeCreate qui est dans l'action de mon module pas de mes composants, celle ci récupère mes parties de formulaires je passe le tout en paramètre a mon processForm dans lequel je verifie leur validité avec la méthode isValid, si celle ci est fausse je recharge mon formulaire dans lequel j'inclut les composants (indexSuccess.php de mon module) cependant, je n'arrive pas a vérifier les erreurs dans les composants je peux le faire uniquement dans le template indexSucces ou je charge ceux ci. Tous mes form que je recupère ne sont pas accessible dans les composants! Quelqu'un a t'il une solution?

  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
    Je pense que tu nous fais une belle salade et essayant de faire faire des choses au framework d'une manière non prévue.

    Qu'appels-tu composant ?

    Tu peux mettre un bout de ton code qui génère le form et un bout de celui qui récupère les données ?

    Dans le principe de fonctionnement tous ce qui concerne un form doit être traité dans une action et un template à l'exception de l'utilisation de partial dans le template qui sont autorisé. Respectes-tu ce principe ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juin 2006
    Messages : 52
    Par défaut
    je pense bien respecter ce principe ^^. Avec du code sa sera plus simple a comprendre.
    ici template de l'index dans lequel j'inclut mes composants
    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
     
    #indexSuccess.php
    <td ><h1>newad</h1></td>
    </tr>
    <tr>
    <?php
    if (isset($Cform))
    { ?>
    	<?php if ($Cform->hasGlobalErrors()): ?>
    .........
    }
    else
    include_component('newAd', 'newAd');
    ....
    include_component('newAd', 'targeting');
    ....
    include_component('newAd', 'pricing')
     
    ?>
    ici Action des composants dans lequel j'instancie mes forms
    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
     
    //component.class.php
    class newAdComponents extends sfComponents
    {
     
    	public function executeNewAd(sfWebRequest $request)
    	{
    		$this->form = new AdsForm();
    	}
     
    	public function executeTargeting(sfWebRequest $request)
    	{
    		$this->targetform = new TargetingForm();
    	}
     
    		public function executePricing(sfWebRequest $request)
    	{
    		$this->priceform = new PricingForm();
    	}
    }
    ici Action appeler a la validation du formlaire
    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
     
    //action.class.php
    public function executeCreate(sfWebRequest $request)
    	{
    		$this->forward404Unless($request->isMethod('post'));
     
    		$this->form = new PricingForm();
    		$this->Tform = new TargetingForm();
    		$this->Cform = new AdsForm();
    		$this->processForm($request, $this->form, $this->Tform, $this->Cform);
    		$this->setTemplate('index');
    	}
     
     
    	public function processForm(sfWebRequest $request, sfForm $form, sfForm $Tform, sfForm $Cform)
    	{
    		$form->bind($request->getParameter('pubC'), NULL);
    		$Tform->bind($request->getParameter('pubT'), NULL);
    		$Cform->bind($request->getParameter('pub'), $request->getFiles('pub'));
    		if ($form->isValid() && $Tform->isValid() && $Cform->isValid())
    		{
                        ....
                    }
            }
    le probleme c'est que une fois les formlaire vérifie je récupéré toutes les erreurs dans l'index et pas dans les composants et je dois refaire le formulaire dans l'index avec les message d'erreur ce qui doit etre normale car je ne sais pas comment faire, peut être que je ne l'utilise pas comme il le faut je veux juste eviter de faire un formlaire géant, donc separer en component me semblais etre une bonne idées.

  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
    Le composant est un ... composant ! Par principe il doit être autonome. Un peu comme un widget que tu accroches sur ton écran windows.

    Ici, le traitement est partiellement fait dans un composant et dans le formulaire. Le composant est totalement dépendant du formulaire et absolument pas réutilisable. Ce n'est donc pas un composant.

    Je n'ai pas d'opinion sur les trois formulaires, s'ils traitent des tables différentes, c'est une bonne solution. La vérification dans ce contexte me semble correctement implantée, mais je n'ai pas testé.

    Je pense qu'il serait plus simple d'instancier tes trois form dans le corps de l'action (executeXxxx) et d'abandonner la notion de composant. Tu peux, par contre, créer des partiels, uniquement destinés à l'affichage, pour alléger ton code dans le template.

    Quant on parle de template justement... Pour le garder lisible le template est écris en xHTML et rien en php, sauf exception, qui arrive très souvent, si non, ça ne peut pas marcher. Cela implique qu'un code php dans un template est toujours sous la forme <?php xxxxxxx ?> et tiens sur une ligne. Quitte à multiplier les balises à gogo. Si non, il devient très vite illisible...

    Utilise la forme alternative pour les if notamment. Et jamais ne couper un if classique (avec des {} ) par une fin de php suivi d'une ouverture. C'est un truc à fabriquer des erreurs.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juin 2006
    Messages : 52
    Par défaut
    Merci beaucoup cette réponse, c'est ce que j'ai finalement fais aujourd'hui j'ai laissé mes différents forms mais je n'utilise plus de composant, l'include partial me semble être l'idéal pour alléger mes templates! J'ai par contre une petite question j'ai un peu de mal personnalisé les widgets comme les radios bouton qui sont aligner verticalement d'origine pour les mettres de façon horizontale doit t'on le faire avec du css ou y a t'il un paramètre pour le configurer?

  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
    En CSS

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/03/2008, 09h46
  2. Réponses: 12
    Dernier message: 16/05/2006, 17h47
  3. Réponses: 11
    Dernier message: 02/02/2005, 12h52
  4. [C#] Une seule méthode pour plusieurs composants
    Par niPrM dans le forum Windows Forms
    Réponses: 8
    Dernier message: 01/06/2004, 14h41
  5. Réponses: 4
    Dernier message: 06/11/2003, 10h37

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