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 :

afficher un formulaire d'envoi d'email impossible


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Profil pro
    developpeur analyste fonctionnel
    Inscrit en
    Mars 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : developpeur analyste fonctionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 92
    Points : 58
    Points
    58
    Par défaut afficher un formulaire d'envoi d'email impossible
    Bonjour,
    J'ai un one page et j'utilise donc sur la même page plusieurs route qui me permet d'afficher des informations de la base de donnée, gérer un filtre de catégorie etc....
    Tout fonctionne bien sur au niveau du formulaire pour envoyer des emails. il est impossible de l'afficher .
    Je précise que si je met une route avec une url différente de celle de ma onepage cela fonctionne très bien .Mais si je précise la même route que mon onepage .... error
    J'essaye de plusieurs façon :
    1 Je crée un template pour le formulaire de mail que j’inclus (méthode include ) sur ma on page.
    2 je crée directement le controler avec la vue du onepage

    le problème est que j'ai une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Variable "form" does not exist in laurentBundle:Default:contact.html.twig at line 7
    j'ajoute donc à mon include le with {...}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {% include "laurentBundle:Default:contact.html.twig" with {'form': 'form'} %}
    Malheureusement j'ai une erreur de rendu du template
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    An exception has been thrown during the rendering of a template ("Catchable Fatal Error: Argument 1 passed to Symfony\Component\Form\FormRenderer::searchAndRenderBlock()
     must be an instance of Symfony\Component\Form\FormView, string given,
     called in /Applications/MAMP/htdocs/Portfolio/app/cache/dev/twig/dd/68/f177e31b2194f31f44e4960fe8a287782ef96f0fbde168c24fae0b2f6fe8.php on line 40 and defined") in laurentBundle:Default:contact.html.twig at line 7.
    Je sais pas comment le résoudre ....
    mes routes :
    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
     
    laurent_adminRealisations:
        resource: "@laurentBundle/Resources/config/routing/realisations.yml"
        prefix:   /adminRealisations
     
    laurent_route_realisations:
        path:     /
        defaults: { _controller: laurentBundle:Default:listRealisations }
     
    laurent_route_Sous_Menu:
        path:     /
        defaults: { _controller: laurentBundle:Categories:sousMenu }
     
    laurent_route_SelectionCategories:
        path:     /categorie/{categorie}
        defaults: { _controller: laurentBundle:Categories:selectionCategories }
     
    laurent_route_PresentationRealisations:
        path:     /realisation/{id}
        defaults: { _controller: laurentBundle:Default:presentationRealisations }
     
    laurent_route_Contact:
        path:     /
        defaults: { _controller: laurentBundle:Default:contact }
        requirements:
          _method: GET|POST
    Le controller de mon formulaire mail
    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
     
        public function contactAction(){
     
        $messagerie = new messagerie();
        $form = $this->createForm(new ContactType(), $messagerie);
     
        $request = $this->getRequest();
        if ($request->getMethod() == 'POST') {
            $form->bind($request);
     
            if ($form->isValid()) {
     
           $message = \Swift_Message::newInstance()
                ->setSubject('Contact enquiry from symblog')
                ->setFrom('enquiries@symblog.co.uk')
                ->setTo('email@email.com')
                ->setBody($this->renderView('laurentBundle:Default:contactEmail.txt.twig', array('messagerie' => $messagerie)));
            $this->get('mailer')->send($message);
     
            $this->get('session')->getFlashBag()->add('blogger-notice', 'Your contact enquiry was successfully sent. Thank you!');
             return $this->redirect($this->generateUrl('laurent_route_Contact'));
     
        }
    }
        return $this->render('laurentBundle:Default:contact.html.twig', array(
            'form' => $form->createView()
        ));
     
    }
    }
    ma vue formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    {% for flashMessage in app.session.flashbag.get('blogger-notice') %}
    {{ flashMessage }}
    {% endfor %}
     
     
    <form action="{{ path('laurent_route_Contact') }}" method="post" {{ form_enctype(form) }}>
        {{ form_widget(form) }}
     
        <input type="submit" />
    </form>
    Ma vue de mon one page ( je ne met que le lien sensé relier le template mail et ma page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {% include "laurentBundle:Default:contact.html.twig" with {'form': 'form'} %}
    Si quelqu'un peut m'aider, je le remercie d'avance

  2. #2
    Membre du Club
    Profil pro
    developpeur analyste fonctionnel
    Inscrit en
    Mars 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : developpeur analyste fonctionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 92
    Points : 58
    Points
    58
    Par défaut
    Par contre si je met dans mon one page la code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      {% include '::default/messagerie.html.twig' %}
    En fait si je crée dans la vue de base (app/Resources/views/ une vue messagerie.html.twig qui va afficher la vue contact.html.twig grace à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     {% render(controller('laurentBundle:Messagerie:contact')) %}
    Le formulaire s'affiche mais ne fonctionne pas , le message flash ne fonctionne pas et le mail n'est pas envoyé

  3. #3
    Membre averti
    Avatar de phpiste
    Homme Profil pro
    Développeur Senior
    Inscrit en
    Septembre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 251
    Points : 445
    Points
    445
    Billets dans le blog
    7
    Par défaut des quotes inutiles ?
    Bonjour,

    essai avec


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% include "laurentBundle:Default:contact.html.twig" with {form: form} %}
    Je suis Développeur Senior ouvert aux opportunités
    Mon blog

  4. #4
    Membre du Club
    Profil pro
    developpeur analyste fonctionnel
    Inscrit en
    Mars 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : developpeur analyste fonctionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 92
    Points : 58
    Points
    58
    Par défaut
    Merci de m'avoir répondu ...
    Malheureusement cela ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Variable "form" does not exist in laurentBundle:Default:index.html.twig at line 166

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    Qu'as tu ligne 166?

    Le premier form est le nom de ta variable utilisé dans ton cotnact.html.twig, donc ici "form". Le deuxieme parametre est la valeur twig a passé, donc ici bien formsans quote.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% include "laurentBundle:Default:contact.html.twig" with {"form": form} %}

  6. #6
    Membre averti
    Avatar de phpiste
    Homme Profil pro
    Développeur Senior
    Inscrit en
    Septembre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 251
    Points : 445
    Points
    445
    Billets dans le blog
    7
    Par défaut
    ça sera utile d'afficher ton action et comment tu passe tes paramêtres vers la vue twig
    Je suis Développeur Senior ouvert aux opportunités
    Mon blog

  7. #7
    Membre du Club
    Profil pro
    developpeur analyste fonctionnel
    Inscrit en
    Mars 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : developpeur analyste fonctionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 92
    Points : 58
    Points
    58
    Par défaut
    Même erreur aprés cela fonctionne si je précise une autre route mais si je met la route de mes réalisations sur la meême route que mon sous menu cela fonctionne mais si j'ajoute la meme route pour le formulaire .. le formulaire plante...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Variable "form" does not exist in laurentBundle:Default:index.html.twig at line 165
    tu as besoin de voir quel fichier phpiste ?

  8. #8
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Points : 62
    Points
    62
    Par défaut
    J'avais du passer quelques heures (plusieurs) avant de résoudre ce problème. Je n'ai pas lu ton code mais je te passe le mien pour t'inspirer
    l'idee est juste d'inclure une action du controller dans le layout (car mon formulaire devait se positionner la parce que je le veux sur toutes les pages du site) il s'agit de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public function emailFormAction()
        {
            $email = new Email();
            $formBuilder = $this->createFormBuilder($email);
            $formBuilder->add('name', 'email');
     
            $form = $formBuilder->getForm();
            return $this->render('BizengineBlogBundle:Blog:email_form.html.twig', array('form'=>$form->createView()));
        }
    et ma vue (depuis le layout):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {{render(controller('BizengineBlogBundle:Blog:emailForm'))}}
    et le template "email_form.html.twig":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <div class="search_box pull-right">
        <form action="{{path('bizengine_email_form')}}" method="post">
            {{form_widget(form.name, {'attr':{'placeholder':'Your email address'}})}}
            <button type="submit" class="btn btn-default"><i class="fa fa-arrow-circle-o-right"></i></button>
        </form>
    </div>
    et enfin la route et l'action du traitement des donnees recu du formulaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    bizengine_email_form:
        pattern: /email
        defaults: { _controller:BizengineBlogBundle:Blog:emailSending }
    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
     
    public function emailSendingAction()
        {
            $email = new Email();
            $em = $this->getDoctrine()->getManager();
     
            $formBuilder = $this->createFormBuilder($email);
            $formBuilder->add('name');
            $form = $formBuilder->getForm();
     
            $emails = $em->getRepository('BizengineBlogBundle:Email')->findAll();
     
            $request = $this->getRequest();
            if($request->getMethod()=="POST")
            {
                $form->bind($request);
                //if($form->isValid()){
                foreach($emails as $hit){
     
                    if ($hit->getName() == $email->getName()){
                        $this->get('session')->getFlashBag()->add('denied', 'This email has been used  already.
                                                      Please kindly choose an other one');
     
                        return $this->redirect($this->generateUrl('bizengine_user_homepage'));
                    }
                }
                $em->persist($email);
                $em->flush();
     
                $this->get('session')->getFlashBag()->add('creation', 'your email has been saved successfully !');
                return $this->redirect($this->generateUrl('bizengine_user_homepage'));       
                //}
            }   
     
            $this->get('session')->getFlashBag()->add('denied', 'creation of the email faild.
                                                      Please kindly inter a right email adress');
     
            return $this->redirect($this->generateUrl('bizengine_user_homepage'));
     
        }
    Je te rappel que mon application est encore en version beta c'est pourquoi tu constatera que l'objet email n'est pas valide et je le persist malgre tout....
    Bref ce code fonctionne bien avec moi et j'utiliser la version 2.7 de symfony. L'idee est juste d'avoir deux actions dans le controller dont une affiche le formulaire en permanence et l'autre traite les donnees envoyer... je m'etais debrouille comme cela mais s'il existe une bonne pratique que cela je prie quiconque de me la montrer afin d'ameliorer mon code.

    Enfin si ma solution t'aide, merci de cliquer surl le bouton "ok" en bas.

Discussions similaires

  1. [2.x] PB validation formulaire d'envoie d'email
    Par dragorane dans le forum Symfony
    Réponses: 1
    Dernier message: 21/04/2012, 20h40
  2. [WB12] formulaire avec envoi d'email
    Par seb290585 dans le forum WebDev
    Réponses: 6
    Dernier message: 12/01/2009, 15h27
  3. formulaire d'envoi d'email
    Par single dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 09/11/2007, 09h51
  4. envoi d email impossible
    Par fabrice29 dans le forum Internet
    Réponses: 3
    Dernier message: 04/06/2007, 18h13
  5. Envoie de EMail avec un formulaire
    Par LibrairieSI dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 28/02/2005, 14h31

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