W tym artykule zostanie przedstawiony sposób wykonania formularza kontaktowego w Laravel 5.


1. Rozpoczynamy od wskazania ścieżek dostępu do dwóch kontrolerów „create” oraz „store” w pliku routingu tak jak w przykładzie:

 

ścieżka: app/http/routes.php


Route::get('/contact', 'ControllerPages@create');
Route::post('/contact', 'ControllerPages@store');

Metoda „create” odpowiada za wyświetlenie formularza, zaś „store” za walidację poprzez żądanie request oraz wysłanie e-mail’a.

 

2. Tworzymy kontroler w linii poleceń artisana wydając polecenie:

php artisan make:controller ControllerPages

 

3. Do pliku kontrolera dodajemy dwie metody „create” oraz „store”

ścieżka: app/http/Controllers/Controller.php

kod:


class ControllerPages extends Controller
{
public function create()
{
return view('pages.contact');
}
public function store(ContactFormRequest $data){
Mail::send('emails.contact', [], function($message) use ($data)
{
$message
->from($data->get('emails'))
->to(env('CONTACT_EMAIL'))
->subject('Prośba o kontakt')
;
});
return redirect()->action('ControllerPages@store')->with(['message' => 'Dziękujemy za kontakt. Odpiszemy jak najszybicej.']);
}
}

W skrócie: metoda create – odpowiada za wyświetlenie formularza, store wysyła E-mail oraz zwraca komunikat w przypadku powodzenia. W zmiennej $message zostały zdefiniowane: - from - od kogo pochodzi e-mail (tu pobieramy pole emails z formularza) - to – (została podana zmienna z pliku .env katlogu głównego projektu „CONTACT_EMAIL”), o konfiguracji tego pliku na końcu artykułu. Warto wspomnieć, równie dobrze może wskazać tu bezpośrednio adres e-mail, co byłoby mało profesjonalnym rozwiązaniem. W „subject” wpisujemy temat naszej wiadomości, oczywiście możemy go zdefiniować w polu formularza a tu wskazać go jako pole do pobrania podobnie jak w „form”, w zależności od uznania.

 

4. Tworzymy żądanie w linii poleceń:

php artisan make:request ContactFormRequest.php

 

5. W pliku żądania tj. ContactFormRequest.php wpisujemy tak jak na podanym przykładzie.

ścieżka: app/http/Requests/ContactFormRequest.php

kod:



namespace App\Http\Requests;
use App\Http\Requests\Request;
class ContactFormRequest extends Request
{
public function rules()
{
return [
'title' => 'required|min:10',
'emails' => 'required|email',
'messages' => 'required|min:10'
];
}
public function authorize()
{
return true;
}
}

W skrócie co oznacza zapis w tym pliku. funkcja/metoda rules definiuje zmienne z formularza które zostaną poddane walidacji i tak np. title i messages minimum wymaganych znaków do spełnienia warunków to 10, zaś dla „emails” podajemy email który jest wbudowaną opcją walidacji dla Laravel 5. Można oczywiście rozszerzyć elementy walidacji, po więcej zapraszam do sięgnięcia polskiej dokumentacji lara vel pod adresem: http://laravel-docs.pl/ oraz dokumentacja Laravel 5 https://laravel.com// W funkcji authorize zmieniamy false na true, po utworzeniu kontrolera żadania jest ona standardowo ustawiona na false, nie zmienienie jej na true spowoduje brak dostępu do wyslania formularza, w przypadku formularza kontaktowego ustawiamy na true jako dostęp dla wszystkich.

 

6. Najważniejsze – plik formularza, tu obędzie się bez opisywania poszczególnych pól formularza

Pola formularza formularz oparte są na systemie szablonów Blade. Opis tworzenia formularza w polskiej dokumentacji. Na początku formularza znajdują się zapisana pętla w Blade, która odpowiada za wyświetlenie błędów walidacji pól, oraz zmienna sesyjna w której została zmienna odpowiedzialna za wyświetlenie komunikatu powodzenia z kontrolera „ControllerPages” metody „store”. Plik formalarza umieszczamy w widoku w którym tworzymy katalog „pages” a w nim contact.blade.php

ścieżka: resources/views/pages/contact.blade.php

kod:

​@if(count($errors) > 0)
  • @foreach( $errors->all() as $error )
    • {{ $error }}
    • @endforeach

@endif @if(Session::has('message'))

{{ Session::get('message') }}

@endif

Kontakt

{!! Form::open(array('url' => '/contact', 'class'=>'form-horizontal')) !!}

{!! Form::label('title', 'Temat:') !!}

{!! Form::text('title', null, ['class'=>'form-control', 'placeholder' => 'Temat']) !!}

 

{!! Form::label('emails', 'E-mail:') !!}

{!! Form::email('emails', null, ['placeholder' => 'E-mail', 'class'=>'form-control']) !!}

 

{!! Form::label('messages', 'Treść wiadomości:') !!}

{!! Form::textarea('messages', null, ['placeholder' => 'Treść wiadomości', 'class'=>'form-control']) !!}

 

{!! Form::submit('Wyślij', ['class'=>'btn btn-lg']) !!}

{!! Form::close() !!} ​

 

7. Prawie ostatnim plikiem jest plik emails.blade.php w którym definujemy wygląd wiadomości jaka otrzymamy od użytkownika. Pola emails oraz messages są przekazywane z wartościami z pól formularza.

ścieżka: resources/views/pages/emails.blade.php

kod:


Wiadomość od {{ Request::get('emails') }}
{{ Request::get('messages') }}

 

8. Ostatnią rzeczą, która nam pozostaje jest konfiguracja pliku „.env” znajdującego się w katalogu głównym projektu. W pliku tym konfigurujemy serwer poczty odpowiedzialny za wysłanie wiadomości formularza.

kod:


MAIL_DRIVER=smtp
MAIL_HOST=mail.serwer.pl
MAIL_PORT=587
MAIL_USERNAME=user
MAIL_PASSWORD=password
MAIL_ENCRYPTION=tls
CONTACT_EMAIL=admin@e-balkany.pl

Opis poszczególnych pól:

MAIL_DRIVER= rodzaj protokołu pocztu tu smtp
MAIL_HOST= adres naszego serwera pocztowego
MAIL_PORT= port serwera pocztowego zazwyczaj 587 ale warto sprawdzić u swojego usługodawcy
MAIL_USERNAME= login
MAIL_PASSWORD= hasło
MAIL_ENCRYPTION= typ szyfrowania zazwyczaj tls

FiNiSh


2016-07-01 17:00:00 Presented by Martin S