Skip to content

Commit

Permalink
Tutoriel 12 Envoyer un mail avec un formulaire de contact sans entite…
Browse files Browse the repository at this point in the history
…́ sur Symfony 3
  • Loading branch information
DamienChiboub committed Mar 25, 2016
1 parent 0f096ef commit f8fab14
Show file tree
Hide file tree
Showing 8 changed files with 126 additions and 66 deletions.
23 changes: 23 additions & 0 deletions app/Resources/views/flash_message.html.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{% for flash_message in app.session.flashbag.get('success') %}
<div class="mt30 container abso col-lg-12 col-md-12 col-sm-12 col-xs-12">
<div class="rows text-center">
<div class="h alert alert-success alert-dismissible">
<button type="button" class="close" data-dismiss="alert"><i class="fa fa-times fa-2x"></i></button>
<h4>{{ 'contact.success.timer'|trans }} <b id="timer"></b> {{ 'contact.success.unity'|trans }}</h4>
<h5><i class="fa fa-envelope"></i> {{ 'contact.success.head'|trans }} </h5>
</div>
</div>
</div>
{% endfor %}

{% for flash_message in app.session.flashbag.get('error') %}
<div class="mt30 container abso col-lg-12 col-md-12 col-sm-12 col-xs-12">
<div class="rows text-center">
<div class="h alert alert-danger alert-dismissible">
<button type="button" class="close" data-dismiss="alert"><i class="fa fa-times fa-2x"></i></button>
<h4>{{ 'contact.error.timer'|trans }} <b id="timer"></b> {{ 'contact.error.unity'|trans }}</h4>
<h5><i class="fa fa-exclamation-triangle"></i> {{ 'contact.error.head'|trans }} </h5>
</div>
</div>
</div>
{% endfor %}
9 changes: 4 additions & 5 deletions app/Resources/views/footer.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,10 @@
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12 ">
<h3>{{ 'footer.title5'|trans }}</h3>
<ul class="social">
<li> <a href="#"> <i class=" fa fa-facebook"> </i> </a> </li>
<li> <a href="#"> <i class="fa fa-twitter"> </i> </a> </li>
<li> <a href="#"> <i class="fa fa-google-plus"> </i> </a> </li>
<li> <a href="#"> <i class="fa fa-pinterest"> </i> </a> </li>
<li> <a href="#"> <i class="fa fa-youtube"> </i> </a> </li>
<li> <a href="https://www.facebook.com/ReverseEngineeringFr" target="_blank"> <i class=" fa fa-facebook"> </i> </a> </li>
<li> <a href="https://twitter.com/Damien_Chiboub" target="_blank"> <i class="fa fa-twitter"> </i> </a> </li>
<li> <a href="https://plus.google.com/110705607218372468993" target="_blank"> <i class="fa fa-google-plus"> </i> </a> </li>
<li> <a href="https://www.youtube.com/c/ReverseEngineeringFr" target="_blank"> <i class="fa fa-youtube"> </i> </a> </li>
</ul>
</div>
</div>
Expand Down
110 changes: 73 additions & 37 deletions src/MainBundle/Controller/DefaultController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

use Symfony\Component\Validator\Mapping\ClassMetadata;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
Expand All @@ -18,7 +20,7 @@
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Constraints\Choice;

use Symfony\Component\Validator\Constraints\Regex;


class DefaultController extends Controller
Expand All @@ -30,7 +32,7 @@ public function indexAction()



public function contactAction(Request $request)
public function contactAction(Request $request)
{

$firstname = $lastname = $email = $object = $message = NULL;
Expand All @@ -55,17 +57,20 @@ public function contactAction(Request $request)
//'maxMessage' => 'contact.error.lastnamemax'
)))))

->add('email', EmailType::class, array('constraints' => array(new NotBlank(array(//'message' => 'contact.error.lastname'
))
,new Assert\Email(array(//'message' => 'contact.error.email',
'checkMX' => true
)))))

->add('email', TextType::class, array('constraints' => array(new Assert\Email(array('checkMX' => true)),
new NotBlank(),)))

// ->add('email', EmailType::class, array('constraints' => array(new Assert\Email(array(//'message' => 'contact.error.email',
// 'checkMX' => true)))))
/*
->add('object', ChoiceType::class, array('choices' => array('' => '','Autre' => "Autre",'Bug' => "Bug", 'Demande' => "Demande"))
, array('constraints' => array(new NotBlank(array(//'message' => 'contact.error.lastname'
)))))
*/
->add('object', ChoiceType::class, array('choices' => array('' => '','Autre' => "Autre",'Bug' => "Bug", 'Demande' => "Demande")))
->add('object', ChoiceType::class, array('choices' => array('' => '','Autre' => "Autre",'Bug' => "Bug", 'Demande' => "Demande")),
array('constraints' => array(new Length(array('min' => 3)))))

->add('message', TextareaType::class, array('constraints' => array(new NotBlank(array(//'message' => 'contact.error.messagenotblank'
))
,new Length(array('min' => 8,
Expand All @@ -75,68 +80,99 @@ public function contactAction(Request $request)
)))))

->add('send', SubmitType::class , array('label' => 'Envoyer'))
->add('send2', SubmitType::class, array('attr' => array('id' => 'autoclosable-btn-success')))
->add('reset', ResetType::class , array('label' => 'Envoyer'))
->getForm();


$form->handleRequest($request);

if ($form->isValid()) {
$firstname = $form["firstname"]->getData();
$lastname = $form["lastname"]->getData();
$email = $form["email"]->getData();
$object = $form["object"]->getData();
$message = $form["message"]->getData();

if ($request->isMethod('POST')){
$this->addFlash(
'notice',
'Ok');
$this->addFlash(
'sent',
'Ok');
} else {
$this->addFlash(
'notice',
'form can\'t be reached like this');
}
if ( $form->isValid() ){
if ( $request->isMethod('POST') ){

}
$request = Request::createFromGlobals();

$firstname = $form["firstname"]->getData();
$lastname = $form["lastname"]->getData();
$email = $form["email"]->getData();
$object = $form["object"]->getData();
$message = $form["message"]->getData();

$message = \Swift_Message::newInstance()

->setSubject($object)
->setFrom(array($email))
->setTo('youremailadress@yourdomain.com')
->setCharset('utf-8')
->setContentType('text/html')
->setBody($this->container->get('templating')->render('MainBundle:SwiftMailer:email.html.twig', array('firstname' => $firstname,
'lastname' => $lastname,
'email' => $email,
'object' => $object,
'message' => $message)));

$this->get('mailer')->send($message);


$this->addFlash('success','Ok');
$this->addFlash('sent','Ok');
} else{$this->addFlash('error','Cant be reached like this');}
} else if (($form->isValid() === FALSE ) && ($request->isMethod('POST'))) {
$this->addFlash('error','Cant be reached like this');
$this->addFlash('not_sent','Not Ok');}

return $this->render('MainBundle:Default:contact.html.twig', array('form' => $form->createView(),
'firstname' => $firstname,
'lastname' => $lastname,
'email' => $email,
'object' => $object,
'message' => $message));
}
'firstname' => $firstname,
'lastname' => $lastname,
'email' => $email,
'object' => $object,
'message' => $message));
}


public function testAction(Request $request)
{

$name = $email = $objet = NULL;
$name = $email = $objet = $regex = NULL;

$validator = $this->get('validator');

$form = $this->createFormBuilder()
->add('name')
->add('email')
->add('regex', TextType::class, array('constraints' => array(new NotBlank(array(//'message' => 'contact.error.lastname'
))
,new Length(array('min' => 3,
'max' => 10,
//'minMessage' => 'contact.error.lastnamemin',
//'maxMessage' => 'contact.error.lastnamemax'
)))))

->add('objet', ChoiceType::class, array('choices' => array('' => null,'Yes' => "Yes",'No' => "No", 'Why Not' => "Why Not")))
->add('send', SubmitType::class , array('label' => 'Ok'))
->getForm();

$form->handleRequest($request);

if ($form->isValid()) {


if ($validator->validate($regex)) {

$name = $form["name"]->getData();
$email = $form["email"]->getData();
$objet = $form["objet"]->getData();
$regex = $form["regex"]->getData();


}

}


return $this->render('MainBundle:Default:test.html.twig', array('form' => $form->createView(),
'name' => $name,
'email' => $email,
'objet' => $objet));
'objet' => $objet,
'regex' => $regex));
}
}
4 changes: 4 additions & 0 deletions src/MainBundle/Resources/public/css/form.css
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
margin-top: 30px;
}

.mt30{
margin-top: -30px;
}

.mt10{
margin-top: -21px;
}
Expand Down
6 changes: 5 additions & 1 deletion src/MainBundle/Resources/translations/messages.en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ navbar:

head:
title: Welcome to sf_tuto
msg: Videos tutorials
msg: Videos tutorials, learn Symfony
button: Check

breadcrumb:
Expand Down Expand Up @@ -41,6 +41,10 @@ contact:
msg: thanks!
timer: Autoclosing in
unity: secondes
error:
head: Error in form
timer: Autoclosing in
unity: secondes

panel:
1:
Expand Down
6 changes: 5 additions & 1 deletion src/MainBundle/Resources/translations/messages.fr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ navbar:

head:
title: Bienvenue sur sf_tuto
msg: Tutoriels videos
msg: Tutoriels videos, apprenez Symfony
button: Voir

breadcrumb:
Expand Down Expand Up @@ -41,6 +41,10 @@ contact:
msg: merci!
timer: Fermeture automatique dans
unity: secondes
error:
head: Erreur dans le formulaire
timer: Fermeture automatique dans
unity: secondes

panel:
1:
Expand Down
25 changes: 3 additions & 22 deletions src/MainBundle/Resources/views/Default/contact.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -21,26 +21,8 @@
</div>


<div class="text-center mt25">
<ol class="breadcrumb cl">
<li class="active"><a href="#">{{ 'breadcrumb.home'|trans }}</a></li>
<li><a href="#">{{ 'breadcrumb.services'|trans }}</a></li>
<li><a href="#">{{ 'breadcrumb.contact'|trans }}</a></li>
</ol>
</div>

{% for flash_message in app.session.flashbag.get('notice') %}
<div class="container abso col-lg-12 col-md-12 col-sm-12 col-xs-12">
<div class="rows mt10 text-center">
<div class="h alert alert-success alert-dismissible">
<button type="button" class="close" data-dismiss="alert"><i class="fa fa-times fa-2x"></i></button>
<h3>{{ 'contact.success.timer'|trans }} <b id="timer"></b> {{ 'contact.success.unity'|trans }}</h3>
<h4><i class="fa fa-envelope"></i> {{ 'contact.success.head'|trans }} </h4>
<p>{{ 'contact.success.msg'|trans }} </p>
</div>
</div>
</div>
{% endfor %}

{% include '::flash_message.html.twig' %}

<div class="container rows"><!-- container -->

Expand Down Expand Up @@ -81,8 +63,6 @@
<b class="text-danger help-block">{{ form_errors(form.email) }}</b>
</div>



<div class="form-group">
<label for="validate-select">{{'contact.form.object'|trans }}</label>
<div class="input-group">
Expand All @@ -91,6 +71,7 @@
</div>
<b class="text-danger help-block pull-left">{{ form_errors(form.object) }}</b>
</div>

<div class="form-group">
<label for="validate-length">{{'contact.form.message'|trans }}</label>
<div class="input-group" data-validate="length" data-length="5">
Expand Down
9 changes: 9 additions & 0 deletions src/MainBundle/Resources/views/SwiftMailer/email.html.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Cet email est envoyé par " {{ firstname }} - {{ lastname }} " et SwiftMailer : <br />
<h1>{{ object }} </h1><br />
<h3> Message : </h3>
<p>{{ message }}
</p><br />
<h4>l'adresse email de contact est {{ email }}</h4>
--

Merci

0 comments on commit f8fab14

Please sign in to comment.