Tvorba jednoduchého webu pomocí frameworku Slim a šablon Twig 3. díl odesílání kontaktního formuláře pomocí Swiftmaileru
- Tvorba jednoduchého webu pomocí frameworku Slim a šablon Twig 1. díl instalace a počateční nastavení
- Tvorba jednoduchého webu pomocí frameworku Slim a šablon Twig 2. díl přidáme si Bootstrap a použijeme šablony Twig
- Tvorba jednoduchého webu pomocí frameworku Slim a šablon Twig 3. díl odesílání kontaktního formuláře pomocí Swiftmaileru
Takže pokročíme dále. Na stránce kontakt máme vytvořený formulář a nyní si naprogramujeme odeslání tohoto kontaktního formuláře. V tomto díle bude poměrně hodně změn, tak čtěte pozorně. Nejprve přidáme použití knihovny Swiftmailer pomocí composeru.
1 |
composer require swiftmailer/swiftmailer |
dále si do souboru start.php přidáme inicializaci pro Swiftmailer a to pomocí
1 2 3 |
$transport = Swift_MailTransport::newInstance(); $mailer = Swift_Mailer::newInstance($transport); |
tady bych jen upozornila že nastavení transportu je závislé na tom jakým způsobem jsou z konkrétního serveru odesílány maily v PHP. Moje nastavení je standrtní nastavení , které funguje na Ubuntu 14.04 tedy.
Dále přidáme do routes.php novou routu pro odeslání formuláře.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$app->post('/kontakt', function () use($app,$mailer) { $request = $app->request; $email = $request->post('email'); $message = $request->post('message'); $name = $request->post('name'); $emailbody = $app->view()->render('emails/kontakt.twig', array('message' => $message)); $emailmessage = Swift_Message::newInstance('Kontakt z webových stránek') ->setFrom(array("$email" => "$name")) ->setTo(array('mar.don@seznam.cz' => 'název firmy')) ->setBody($emailbody) ->setContentType("text/html"); $results = $mailer->send($emailmessage); if($results) { $app->flash('global', 'Váš mail byl odeslán.'); return $app->response->redirect($app->urlFor('kontakt')); } })->name('email'); |
Tento kód nám vyvolá, ale také úpravu původní šablony pro kontakt.
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 |
{% extends '/templates/default.twig' %} {% set active_page = 'kontakt' %} {% block content %} <div class="row"> <div class="col-md-6"> <h1>Napiště nám</h1> <form method="post" action="{{ urlFor('email') }}"> <div class="form-group"> <label for="name">Vaše jméno</label> <input name="name" type="text" class="form-control" id="name" placeholder="Jméno"> </div> <div class="form-group"> <label for="email">Email</label> <input name="email" type="email" class="form-control" id="email" placeholder="Email"> </div> <div class="form-group"> <label for="message">Zpráva</label> <textarea name="message" class="form-control" rows="5" id="message" placeholder="Text zprávy"></textarea> </div> <button type="submit" class="btn btn-default">Poslat</button> </form> </div> </div> {% endblock %} |
Pokud si všimneme je tam přidáno použití flash pro zobrazení zprávy o správném odeslání formuláře, nezapomeňte pro flash se používá session a je potřeba do start.php na začátek přidat
1 |
session_start(); |
Aby byly flash zprávy dostupné v každém view, modifikujeme defaultní šablonu a to tak, že si do ní vložíme šablonu pro vkládání flash zpráv
1 2 3 4 5 6 7 8 9 |
<div class="container"> {% include 'templates/partials/message.twig' %} {% block content %}{% endblock %} </div> <!-- /container --> |
nyní si tedy ještě vytvoříme message.twig šablonu
1 2 3 |
{% if flash.global %} <div class="alert alert-success">{{ flash.global }}</div> {% endif %} |
vidíme, že se nám bude zobrazovat pouze , když budeme mít nějakou flash message. Ještě nám zbývá vytořit šablonu pro obsah zasíláného mailu
1 2 3 4 |
Zpráva byla odeslán z vašich webových stránek<br> Zákazník: {{ name }}<br> Email: {{ email }}<br> Text zprávy: {{ message }} |
No a jsme hotovi. Samozřejmě, že by se to dalo vylepšit (sanitizace, csrf,antispam), ale to již nechám na vás nebo na příště