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 :

Formulaire d'un module à partir d'un autre module


Sujet :

Symfony PHP

  1. #1
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Par défaut Formulaire d'un module à partir d'un autre module
    Je voudrais savoir comment remplir des infos dans un module à partir d'un autre module. Concrètement, sur la page showSuccess du module Article, je veux afficher en dessous du texte le formulaire du commentaire (ca, ca a été fait avec un $this->form dans l'executeShow et un include_partial dans le showSuccess), le remplir, le faire valider, afficher là même les messages d'erreur et enregistrer le commentaire, sachant que l'action executeCreate des commentaires est dans le module commentArticle. J'ai fait des redirects, mais d'un côté ou d'un autre, des variables manquent à l'appel. Merci de votre aide.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Si j'ai bien compris ton problème, cela se présenterait de cette façon :
    - dans ton module commentArticle, tu créés un component.class.php avec comme action dedans : executeShowCommentArticle (et qui doit se contenter d'afficher ton formulaire) ;
    - dans ton showSuccess de ton module Article, tu n'as plus qu'à inclure l'action de ton component en faisant un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    include_component('commentArticle', 'showCommentArticle');
    (syntaxe des arguments à vérifier)

    Tu auras sans doute du code dupliqué entre actions.class et components.class de ton module commentArticle. Une fois que le tout marche, vois comment refactorer.

  3. #3
    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
    M'a l'air bien compliqué que tous cela.

    Je vais y mettre mon grain (de sel )

    Tu veux l'affichage (non modifiable) d'un article, l'affichage (pas la modification) des commentaires existants, la saisie d'un nouveau commentaire (a partir du formulaire (form) du commentaire)?

    Dans l'action show du module article un truc dans le genre (pas testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public function executeShow(sfWebRequest $request)
    {
      // Récupération de l'article
      $this->foward404unless( $this->article = Doctrine_core::getTable('article')->findOneById( $request->getParameter( 'Id' ) );
      // Initialise le form pour la saisie
      $newComm = new commentaire();
      $newComm->setArticle($this->article);
      $this->formComm = new commentaireForm( $newComm );
    }
    Et le template qui, lui, doit être revu, c'est sur !
    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
     
    <h1><?php echo $article->getNom() ?></h1>
    <p><?php echo $article->getCorp() ?><p>
    <?php foreach ($article->getCommentaires() as $commentaire ): ?>
      <h3><php echo $commentaire->getDate() ?> - <?php echo $commentaire->getNom() ?></h3>
      <p><php echo $commentaire->getTexte() ?></p>
    <?php endforeach ?>
    <form .... <chemin vers le traitement de l'insertion d'un commentaire> >
      <h2>Insérer votre commentaire<?h2>
      <table>
        <?php echo $formComm ?>
        <tr colspam=2>
          <td><input type="submit" /></td>
        </tr>
      </table>
    </form>
    Juste à prendre en guise d'inspiration.

    On peut améliorer un peu les perfs en modifiant la requête qui récupère l'article pour récupérer les commentaires (surtout si le nom vient d'une troisième table !) en même temps, cela ne va pas changer le template.

    Et rien de bien compliqué.

    Il faut aussi prendre en compte un retour négatif de l'insertion du commentaire, perso, j'afficherai une page juste avec les erreurs consécutive à la non validation du form.

    Il n'est pas nécessaire dans le code de récupération d'avoir le numéro de l'article, vu que l'enregistrement est déjà lié lors de l'initialisation du form, le bind va reprendre la liaison.


    Il y a bien une autre solution, qui serait de créer une form vierge (sans la liaison) et dans le chemin de retour du form, d'inclure le numéro de l'article (en effet, grâce à sfWebRequest, il est possible de récupérer dans une même requête http, et du GET et du POST.

Discussions similaires

  1. Comment modifier un xsl à partir d'un autre module?
    Par vernetk dans le forum Odoo (ex-OpenERP)
    Réponses: 2
    Dernier message: 19/05/2014, 10h28
  2. Réponses: 0
    Dernier message: 24/09/2012, 07h37
  3. Appel d'une macro a partir d'un autre module
    Par jean bapt' dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/08/2012, 12h12
  4. [1.x] Admin module qui regroupe d'autres modules
    Par Lianodel dans le forum Symfony
    Réponses: 3
    Dernier message: 30/03/2011, 17h45
  5. Réponses: 10
    Dernier message: 24/09/2008, 15h43

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