Techniki Pracy
8 godz. 33 min · Laravel · Full-stack i Programowanie
Piotr PalarzWeb DeveloperKurs ten rozpoczniemy od omówienia czym jest framework Laravel i co może Ci zaoferować. Następnie zobaczysz jak skonfigurować środowisko do pracy lokalnej w formie wirtualnej maszyny z preinstalowanymi narzędziami, tj. PHP, MySQL czy serwerem nginx. Zobaczysz w jaki sposób tworzyć nowe projekty wykorzystujące Laravel, zrozumiesz strukturę katalogów projektu i skonfigurujesz polaczenie z baza danych.
W kursie nie znajdziesz czysto teoretycznych lekcji. Każda z części przybliżać nas bowiem będzie do finalnej wersji projektu, którym będzie aplikacja internetowego bloga. Funkcjonalności, które od podstaw zaimplementujemy, to m.in. dodawanie i wyświetlanie wpisów, tworzenie i przypisywanie tagów, komentowanie, rejestracja i logowanie użytkowników czy wyszukiwarka. Każda z nich odkryje przez Toba możliwości frameworka Laravel i jego sposoby na rozwiazywanie konkretnych problemów.
Laravel to framework oparty o wzorzec MVC. Na konkretnych przykładach zobaczysz co to oznacza. Tworzyć będziemy wspólnie kontrolery, do których przypiszemy stosowne adresy URL, modele, które reprezentować będą dane, a także widoki, które te dane sformatują, wplatając je w kod HTML.
Choć aby w pełni zrozumieć omawiane zagadnienia, należy znać podstawowe koncepcje relacyjnych baz danych, to pisanie zapytań SQL nie jest czymś, to będziemy musieli robić. Wszystko to za sprawa migracji oraz Eloquenta. Te pierwsze pozwolą nam zaprojektować strukturę tabel bazy danych i jedna komenda je utworzyć, a Eloquent posłuży nam do tworzenia, zapisywania i odczytywania modeli reprezentujących te dane. Wszystko to uzyskamy pisząc wyłącznie prosty kod PHP.W kursie nie zabraknie również informacji na temat tworzenia relacji. Zobaczysz m. in. jak skojarzyć autora w wpisem, jak dodawać tagi czy komentarze.
Te dwa pojęcia, choć podobne, różnią się od siebie. Pierwsze pozwala określić, czy logujący się użytkownik jest tym, za kogo się podaje. Drugie mówi nam, czy dana osoba może wykonać zadana akcje. Oba te koncepty zobaczysz w akcji na praktycznym przykładzie. Do naszego bloga dodamy pełen system autentykacji, tj. rejestracje, logowanie, resetowanie hasła i potwierdzanie adresu email. Zalogowani użytkownicy otrzymają dzięki temu bonus w postaci niewidocznych dla pozostałych osób wpisów premium. Aby zarządzać wpisami na blogu, stworzymy mini sekcje administracyjna, do której dostęp będzie miał wyłącznie użytkownik oznaczony jako administrator. Dowiesz się wówczas nie tylko jak pokazywać pewne widoki wyłącznie zautoryzowanym osobom, ale także jak zabezpieczyć kontrolery przed nieuprawnionym dostępem.
Oprócz wymienionych wyżej tematów, w kursie poruszymy również uploadowanie plików na serwer, sposoby tworzenia i wysyłania maili, prace z Front-endem, debugowanie aplikacji, korzystanie z rozszerzeń tworzonych przez aktywna społeczność Laravel czy techniki wdrażania aplikacji do produkcji. Ostatni temat będzie o tyle ciekawy, ze jest on często pomijany w materiałach tego typu. Z tym kursem Twoja aplikacja nie pozostanie wyłącznie na dysku Twojego komputera. Dowiesz się bowiem jak skonfigurować serwer VPS tak, aby wykorzystać tzw. zero-downtime deployment. Dwie komendy wystarcza wówczas do tego, aby w kilkanaście sekund nowa wersja Twojej aplikacji ukazała się światu. A wszystko to bez przerywania jej działania nawet na ułamek sekundy i bez wykorzystania płatnych rozwiązań!
Kurs ten jest dla wszystkich tych, którzy znają już podstawy języka PHP i koncepcje relacyjnych baz danych SQL oraz chcieliby przyjemnie i wydajnie tworzyć ambitne aplikacje internetowe. Znajomość samego frameworka Laravel lub podobnych rozwiązań nie jest jednak wymagana. Praca z frameworkiem omawiana jest stopniowo, od podstaw do bardziej zaawansowanych tematów. Jeśli zatem masz głowę pełną pomysłów, a chcesz uniknąć frustracji związanej z pisaniem wszystkiego od podstaw - koniecznie sięgnij po Laravel i zobacz jak to narzędzie pozwoli skupić Ci się na tym, co istotne!
5.8.x
Ostatnim komponentem naszego systemu autentykacji będzie potwierdzenie
adresu email po rejestracji i my będziemy jako twórcy aplikacji webowych mogli
to wykorzystać do tego, aby na przykład pozwoli użytkownikowi na pewno akcje
w serwisie lub nie pozwolić, w zależności tego czy został jego adres
email zweryfikowany. Żeby to zrobić przejdziemy sobie do login i register
i spróbujemy zarejestrować nowego użytkownika. Natomiast zanim to
zrobimy, chciałbym żebyśmy przeszli do user i będziemy
tutaj chcieli dodać jedną rzecz. Jest tutaj zaimportowane coś takiego jak MustVerifyEmail
i jest to interfejs, który musimy zaimplementować, jeśli chcemy z tego korzystać,
czyli php implements, MustVerifyEmail to
jest pierwsza rzecz i druga rzecz, musi mieć odpowiedni routing, również
do tego, więc jeżeli przejdziemy to web rautes, w miejscu gdzie i mieliśmy Auth routes,
zauważ to są wszystkie te, które tutaj zostały dodane. Nie ma tutaj nic na temat
weryfikowania, dlatego musimy tutaj sobie dodać parametr taki
jak verify true. Jeżeli sobie
to zapiszemy i tutaj raz jeszcze zrobię php artisan route:list
to się okaże, że tutaj zostały dodane pewne również ścieżki do
weryfikacji adresu email i na razie nam wystarczy, te dwie które zrobiliśmy i spróbujemy
zarejestrować sobie nowego użytkownika. Wpiszemy jakiś fejkowy adres email. Uzupełnij u
siebie cokolwiek i dwa razy
poprawne hasło, minimum 8 znaków, pamiętaj i spróbujemy
takiego użytkownika zarejestrować, czekamy i to
trwa dłużej niż zwykle właśnie do tego że wysyłał adres, wysłał się email
po prostu za pomocą SMTP, użytkownik się zalogował, zarejestrował i
teraz jeżeli przyjdziemy do mailtrap'a, to zauważ, że mamy tutaj verify
email address, czyli to jest właśnie to co chcemy zrobić i dopóki użytkownik tego
nie zrobi to w bazie danych będzie figurował jako niezweryfikowany. Dokładnie
tutaj możesz zobaczyć email_verify_at, ani jeden ani drugi nie zweryfikował
adresu email. Kiedy to zrobi, tutaj pojawi się data i laravel ten sposób
będzie mógł określać czy adres email został zweryfikowany, więc teraz będziemy
chcieli przejść pod taki adres, ale zanim to zrobimy musimy sobie ustawić
stosowne kontrolery. Kiedy zrobiliśmy tutaj coś
takiego, one zostały ustawione, ale pamiętasz ja lubię je sobie tutaj przepisać dlatego
będę chciał to zrobić żebyśmy również widzieli dokładnie z czego korzystamy. Dlatego
teraz przejdźmy sobie i zobaczymy co tam jest konkretnie. Ten adres,
który nam przysłali to jest email ukośnik verify i następnie mamy tutaj
jakiś ciąg. Czyli będzie to dokładnie ta ścieżka. Dlatego
ja sobie ją będę chciał skopiować dotąd, nie więcej i mamy
to mamy to jako verification.verify, dlatego dodam sobie
to w tym miejscu. Okej to jest pierwsza rzecz i teraz
byśmy do tego kontrolera przeszli, żeby zobaczyć co tam się dzieje pamiętaj, my ten kontroler mamy.
Jest to metoda verify. Widzimy, że
przekierowanie na home, coś czego nas nie ma, więc musimy to usunąć i teraz
przejdziemy do trait'a, który tutaj jest i sprawdzimy co robimy to verify. Jak
widać ona po prostu weryfikuje ten adres i następnie przekierowuje nas do
odpowiedniej ścieżki, redirectPath to jest to, co przed sekundą zmieniłem,
było Home, zmieniłem na stronę główną, jeżeli wszystko będzie w porządku, to przekieruje
nas właśnie na stronę główną, w naszym przypadku i gdzie do sesji wstrzyknie verified
na true i to jest rzecz, której chciałbym od razu zawczasu skorzystać. Nie będziemy
musieli tego robić później, czyli przejdziemy sobie do naszego message i chciałbym tutaj
dodać jeszcze jeden if, jeżeli
w sesji jest verified, zobaczmy dokładnie,
zgadza się, to tutaj będziemy chcieli wyświetlić użytkownikowi komunikat
your email has been verified, okej.
Sprawdźmy zatem co się wydarzy kiedy będziemy chcieli przejść pod
ten adres. Kopiuję ten adres, tutaj musimy być zalogowani,
jesteśmy, bo widzimy to po tym linku. Próbuję pod ten adres przejść. Jak
widzisz your email has been verified, czyli zadziałało to jak najbardziej poprawnie. Jeżeli
teraz byśmy w bazie danych sobie zerknęli, to ten użytkownik jest już zweryfikowany. To
jednak jeszcze nie wszystko, bo jeżeli sobie przejdziemy tutaj to zobaczymy że były tutaj jeszcze dwie
dodatkowe ścieżki. Pierwsza z nich to była email recent. Ona kierowała
nas do metody recent a druga kierowana metody show, więc zobaczymy co te metody
robią, jest dokładnie tutaj. Mamy recent, jak
widzisz, ta metoda wysyła raz jeszcze, zaraz przyjdziemy do tego gdzie to będzie, do
nas email i wstawia do sesji recent, więc od razu chciałbym
tutaj jeszcze zrobić sobie jedno sprawdzenie, nie będziemy musieli o tym myśleć później. Jeżeli w sesji
znajdzie się coś takiego jak recent, to możemy tutaj wyświetlić stosowny komunikat, verification
link has been sent to you, tyle nam wystarczy, więc tutaj będziemy przynajmniej mieli temat
zamknięty. To był pierwszy controller, recent, a jeszcze jeden to był
show czy metoda show i zauważ, że ona właśnie zwraca nam
pewien widok. Jest to auth.verify i teraz co z tym widokiem. Jeżeli
przejdziemy oczywiście do naszych
widoków, czyli tutaj. Jest taki widok wygenerowany już wcześniej jak verify. Będziemy
chcieli sobie go teraz zastąpić naszym własnym widokiem. Ja tutaj pozwolę
sobie wkleić gotowy kod i będzie to wyglądać następująco, czyli
verify your email address, jest tego mniej niż przed momentem, bo nie potrzebujemy wszystkich
komunikatów, które tam były. Będzie to wyglądać tak, jeżeli
nie otrzymałeś adresu email, to prześlij nam go jeszcze raz czyli to jest ten controller,
który przed momentem widzieliśmy i ja mam zwyczaju tak jak mówiłem dodawać sobie te kontrolery,
dlatego pozwolę sobie te dwa jeszcze dodać do web i zaraz ci wytłumaczę kiedy
ten widok się może pojawić. Przejdę
do web i szybko sobie to dodam, na samym dole, nie musisz tego robić, w razie czego. Podobnie
zrobię tym, który mieliśmy tutaj, recent. Zauważ, że one wszystkie operują
na zapytanie o typie get, okej. I ona nazwę verification.resend,
dlatego tutaj do tego linku mogłem to podlinkować. No i teraz ten
widok pojawia się po przejściu właśnie pod email
verify, spróbujemy tam przejść. Jak
widzisz, przekierowuje nas do strony głównej, bo ten adres jest już zweryfikowany.
Natomiast jeżeli tutaj sobie wstawimy null, zapiszemy
i spróbuję raz jeszcze przejść pod taki adres. W razie czego możesz
je dostosować na przykład account email verify. Jak
widzisz, teraz nam się pojawił ten widok. Jeżeli ktoś nie dostał
adresu email może kliknąć request another, czyli kliknie, coś
nam się tutaj popsuło. Znowu prawdopodobnie za dużo
skopiowałem. Zgadza się, więc to
kopiowanie może nie jest aż tak dobre, aczkolwiek ja
mimo wszystko lubię to mieć w jednym miejscu. Klikniemy request another i zobaczmy, mail
się wysyła i mamy nasz komunikat, właśnie dzięki temu, że do sesji to wcześniej zostało
podane i uprzedzając fakty, daliśmy to w tym miejscu i
tutaj. Okej, czyli znowu zostało nam to przesłane i możemy sobie potwierdzić
ten adres email. Natomiast, póki nie jest potwierdzone, mógłbyś się zastanawiać, w zasadzie kiedy
ten widok się pojawi. Możesz go wyświetlić użytkownikowi twojej aplikacji
sam, przez jakiś link lub on się może pojawić w momencie
w którym będziemy chcieli zablokować dostęp do jakiegoś zasobu
użytkownikom niezweryfikowanym i na koniec pokażę ci w jaki sposób to zrobić. Jeżeli
przeszli byśmy na do PostController i wyświetlamy wszystkie wpisy,
a tutaj wyświetlamy pojedynczy wpis. To gdybyśmy chcieli ten pojedynczy wpis wyświetlać
wyłącznie dla użytkowników zweryfikowanych, to możemy skorzystać z middleware
w konstruktorze public function __construct. W
konstruktorze można z middleware'ów korzystać w ten sposób, this middleware. Wszystkie,
które są zarejestrowane będą tutaj dostępne więc this middleware i następnie
verified. Natomiast nie chcemy na wszystkich ścieżkach z
tego korzystać, ale tylko na tej jednej, więc tutaj można jeszcze skorzystać z metody only i
podamy show. To oznacza, że to middleware
ma być zastosowane wyłącznie do tej ścieżki show. Teraz, jeżeli przejdziemy
tutaj i będę chciał przejść do pojedynczego wpisu, przekieruje nas
do verify your email. Tak dokładnie to wygląda i teraz jeżeli ktoś przejdzie
pod ten adres i się zweryfikuję, your
email has been verified, może przejść takiego pojedynczego wpisu. Więc w taki sposób
to będzie wyglądać. Ja to usunę, bo nie jest nam to w tym momencie potrzebne, ale jak
widzisz, w ten sposób oraz na kilka jeszcze innych, będziesz mógł sprawdzać
czy użytkownik zweryfikowany. Poza tym tyle jeżeli chodzi o
system autentykacji, możemy się rejestrować, logować, przypominać hasło czy
w zasadzie to hasło resetować oraz potwierdzać czy email należy do
nas.
web.php · 6 min
Route::get('/email/verify', 'Auth\VerificationController@show')->name('verification.notice');
Route::get('/email/resend', 'Auth\VerificationController@resend')->name('verification.resend');verify.blade.php · 6 min
@extends('layouts.master')
@section('title', 'Verify Your Email')
@section('content')
<div class="wrapper">
<div class="rte">
<h1>Verify Your Email</h1>
</div>
<div class="rte mt">
<p>Didn't get an email? <a href="{{ route('verification.resend') }}">Request another.</a></p>
</div>
</div>
@endsectionweb.php · 6 min
Route::get('/email/verify', 'Auth\VerificationController@show')->name('verification.notice');
Route::get('/email/resend', 'Auth\VerificationController@resend')->name('verification.resend');verify.blade.php · 6 min
@extends('layouts.master')
@section('title', 'Verify Your Email')
@section('content')
<div class="wrapper">
<div class="rte">
<h1>Verify Your Email</h1>
</div>
<div class="rte mt">
<p>Didn't get an email? <a href="{{ route('verification.resend') }}">Request another.</a></p>
</div>
</div>
@endsectionweb.php · 6 min
Route::get('/email/verify', 'Auth\VerificationController@show')->name('verification.notice');
Route::get('/email/resend', 'Auth\VerificationController@resend')->name('verification.resend');verify.blade.php · 6 min
@extends('layouts.master')
@section('title', 'Verify Your Email')
@section('content')
<div class="wrapper">
<div class="rte">
<h1>Verify Your Email</h1>
</div>
<div class="rte mt">
<p>Didn't get an email? <a href="{{ route('verification.resend') }}">Request another.</a></p>
</div>
</div>
@endsection