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
Skonfigurowaliśmy już mailtrap, czyli możemy przyjmować wiadomości email
i w tej lekcji pokażę ci w jaki sposób możemy zresetować hasło. Przejdziemy
do login i tutaj taki link mamy jak Reset it here, on jeszcze nie jest podlinkowany
i teraz się tym będziemy chcieli zająć. Znowu sobie wyświetliłem wszystkie
nasze route'y czyli php artisan route:list i zobacz czy
mamy tutaj takie, jak na przykład password/email, password/reset, password/reset i jeszcze
jedno tutaj password/reset. No właśnie będziemy chcieli z tego teraz skorzystać,
znowu będę chciał sobie to przekopiować do web kropka php i od
czego zaczniemy, showLinkRequestForm, to jest pierwsza rzecz, którą chcemy
zrobić i tym razem pozostawię sobie takie ścieżki jak są, czyli
password/reset, już nie będę robił account ukośnik password reset, chociaż
w razie czego możesz też po zastosować, uważam, że te są w porządku, w tym przypadku i
to będzie get i nazwa password request, te
nazwy również sobie będę chciał zostawić. Przejdźmy do w web i
będzie to get password
email. Jeśli dobrze pamiętam, zobaczmy, w zasadzie
password reset i tutaj name to będzie password.request.
Skoro nic tutaj nie zmieniłem, to nie musiałbym tego dawać
bo Auth routes nam to dodaje. Na końcu sobie to usuniemy, to jak wspomniałem tylko kwestia
moich preferencji, lubię tutaj od razu widzieć, co się dzieje. Teraz mamy
taki Controller jak właśnie ForgotPasswordController. Zauważ, że
się znajduje w tym miejscu, ma middleware guest, to oznacza, że wyłącznik
gość może korzystać z jego metod. Gościem jesteś kiedy jesteś niezalogowany, więc
dokładnie tak jest w naszym przypadku. Jeżeli przejdziemy do jego trait'a, to zobaczymy,
że on zwraca nam widok auth password passwords email, więc
zobaczmy czy taki widok się u nas pojawił, ale powinien kiedy wygenerowaliśmy
sobie cały ten system autentykacji, więc powinno być tutaj views auth passwords
i następnie email. Jak widzisz, jest taki oto,
taki oto templet i znowu ja będę chciał go zastąpić naszym
własnym, więc kopiuje sobie wszystko co mieliśmy na przykład tutaj. Zmienię
tutaj na reset password, tutaj
również, okej. No i
oczywiście teraz z HTML'a sobie skopiujemy odpowiedni widok. Jest to reset,
widzimy że formularz
wygląda następująco, czyli tylko wnętrze formularza w zasadzie sobie skopiujmy. Okej, tutaj
podajemy email, to jest istotne, znowu znaleźlibyśmy to w tamtych plikach, route
to tym razem będzie inna ścieżka, musimy sobie ją
podejrzeć najpierw czy będzie to post i dokładnie jest
to ten post, czyli password email. Znowu ja sobie go dodam do web. Będzie
to password email i password email, tak
to będzie wyglądać i skoro mamy nazwę password email to sobie tutaj wpiszę,
okej. Wysyłamy
tam email, powinno być porządku tutaj oczywiście można sobie jeszcze zastosować walidację i
wyrzucimy jeszcze to co skopiowałem z login. Dobrze, sprawdźmy
zatem jak by to mogło wyglądać, reset it Here, czy
nam się to wyświetli. Musimy tutaj odświeżyć ten link, a nie podlinkowaliśmy
go jeszcze, przejdźmy do login, route i
to będzie password reset, w
zasadzie request, zgadza
się i nasz widok reset password się pokazał jeżeli zrobię submit, tutaj jak widzimy
tutaj się podświetla nasz globalny komunikat. Również tutaj działa poprawnie, czyli
jeżeli teraz dobrze wyślemy ten formularz to on nam się wyślę właśnie
pod ten adres, który zdefiniowaliśmy tutaj i powinien
zostać do nas wysłany link do resetu hasła więc sprawdźmy czy tak rzeczywiście stanie. W
moim przypadku muszę sobie zerknąć jaki był ten fejkowy email,
który sobie utworzyłem. Podam go i wyślę, no
właśnie i nic się tutaj nie wydarzyło, tak by się przynajmniej mogło wydawać. Okej,
w zasadzie jeszcze nie zdążyło, bo tutaj musieliśmy poczekać, czyli wydarzyło
się, sstrona się przykładowała dopiero teraz, bo chwilę trwało wysyłanie tego maila. Jeżeli
przyjdziemy tutaj, on się wysłał dwa razy bo dwa razy wcisnąłem ten przycisk, w oczekiwaniu. Moglibyśmy
ten przycisk w javascripcie oczywiście blokować po jednokrotnym kliknięciu, w każdym
razie zobacz. Mail do nas przyszedł i teraz tak. No i to działa tak że from
które sobie zdefiniowal my w pliku env, ładne jest tutaj, to jest adres, a
tu widzimy do kogo ten email miał pójść. On tam tak naprawdę nie został wysłany i mailtrap
jest genialny, bo możemy wszystko dokładnie sobie tutaj podejrzeć i zdebugować. Dla
nas jednak ważne jest to, że laravel wysłał nam taki oto email i że mamy
tutaj również zdefiniowane w pliku env w lekcje poprzedniej adres larablogger.test i
mamy cały taki oto link, więc tego z tego linku będziemy chcieli
skorzystać, ale on na razie u nas jeszcze nie zadziała, dlatego że on
kieruje na password reset i tutaj jak widzisz jest jakiś token, więc jeżeli
sobie zamkniemy okaże się że jest to ten adres dlatego zanim przejdziemy
pod ten link to chciałbym taki adres również sobie w łeb zdefiniować to
jest zwykły get bo on po prostu będzie wyświetlał odpowiedni formularz password/reset
i tutaj jest token i podamy
sobie jego name. To było chyba
password reset. Zerknijmy, zgadza
się i to z kolei wywołuje metodę showResetForm i
od razu mogę ci powiedzieć, że to będzie wyświetlało taki oto formularz, jaki się
tutaj znajduje, więc ten formularz będzie zawierał email, który trzeba
wpisać oraz dwa razy hasło, nowe hasło, które trzeba wpisać. Dlatego
musimy sobie tutaj również podstawić odpowiedni widok. Dla
nas najprościej będzie skopiować wszystko, co było w tym miejscu. Wkleić tutaj i
skoro email już podajemy. To teraz sobie podamy jeszcze password
i oczywiście
zmienimy tylko type i name, kopiujej teraz
jeszcze i musimy zrobić password confirmation, czyli tutaj pozostaje
password a name będzie to password confirmation. Zmieńmy
sobie tutaj na new password i new
password again. To
powinno wystarczyć, tutaj możemy to podmienić na reset
password, okej.
I jeszcze tutaj musimy dostosować ten
adres na password reset, czyli tak by to miało wyglądać.
Zobaczmy jeszcze ostatnią rzecz, którą musimy
dodać. Jak widzisz trochę tych kroków jest, ale zrobimy teraz i będzie działać to poprawnie. Skoro
to nam wyświetla taki formularz to teraz ten formularz gdzieś musi być wysłany. On musi
być wysłany pod password reset. Dokładnie pod taki adres. Nazwa
to będzie password update, oczywiście to nazwa zależy od nas, jeżeli sobie ją tutaj zmieniamy,
ale pozostaniemy przy tych, które tam są i na koniec chociaż nie musiałbym
tego robić tak wspominałem, dodaje sobie to w route, jako post, OK. Teraz
to wszystko powinno nam już zadziałać. Przejdziemy
tutaj, będę chciał skopiować cały ten link i na naszej stronie go wkleić.
Jak widzisz reset password nam się wyświetliło. Teraz
jeszcze tylko mógłbyś zastanawiać w jaki sposób to działa, dlatego na sekundkę przejdźmy sobie
do bazy danych. Zauważ, że od początku mieliśmy taką migracje jak password reset,
która nam utworzyła taką tabelę i dokładnie w momencie kiedy użytkownik zażądał
resetowania hasła, jest tutaj dodawany jego email oraz token. Dzięki temu ten
kontroler może sobie sprawdzić. Jeżeli ktoś przyjdzie pod taki adres, znajdzie
ten token, zauważ. Użytkownik tutaj wpisze swój adres email
i dwa razy nowe hasło, czyli łatwo już jest to sprawdzić po stronie
serwera. Mamy wpisane przez kogoś adres email, mamy token, więc sprawdzamy w bazie danych czy
ten token, który tutaj jest, jest przypisany do takiego adresu email. Jeżeli
tak, wiemy, że jest to na pewno ten użytkownik, bo otrzymał ten token na adres
email i w ten sposób może ustawić sobie nowe hasło. To
nowe hasło powinno zostać bez problemu ustawione i powinniśmy
wtedy otrzymać stosowny komunikat i żeby tej lekcji nie przedłużać to uprzedzam fakty
i podobnie wcześniej przy login, przy register, będę chciał tutaj dodać odpowiedni,
odpowiednią metodę. Przejdźmy do kontrolera
reset password controller, tutaj do tego trait'a i tutaj
gdzieś znajdziemy co dzieje się po tym jak uda się zresetować
hasło. Jak widzisz, jest dokładnie ta metoda, ona nas przekierowuje do redirectPath,
czyli do tego co mamy ustawione w redirect,
czyli tutaj do home będziemy to chcieli zmienić w tym przypadku znowu
na główną ścieżkę, więc tam nas przekierowuje,
wrócimy nas jeszcze i ustawia status na jakąś wiadomość. Ja bym chciał
żeby nas było to ustawione jako message, a nie status, bo to właśnie jest
alternatywny sposób ustawienia sesji, czyli tak jak wcześniej ci
pokazywałem session flash albo możemy przy użyciu funkcji redirect
zrobić with. Dlatego my musimy w tym przypadku całą tą metodę nadpisać,
nadpisać ResetPasswordController, wstawimy
ją tutaj i chcę przekierować with messag
i tu po prostu napiszemy użytkownikowi, że jego hasło zostało zresetowane. Okej,
wiemy jak będziemy mieli message, to nasz komunikat się od razu wyświetli, więc mając już to wszystko
spróbujmy zresetować hasło. Podaję adres tego użytkownika i dwa
razy będę chciał wpisać nowe hasło, chociaż w zasadzie możemy wpisać jakieś
hasło niepoprawne, sprawdzić czy walidacja nam tutaj zadziała. O, jak widzisz coś
nam nie zadziałało. Widzimy, że kontroler który podaliśmy z jakiegoś
powodu nie istnieje, i oczywiście skopiowałem
tutaj zbyt wiele. Jak widzisz, taa ścieżka powinna wyglądać następująco,
więc wrócimy sobie raz jeszcze do tej strony. Odświeżę ją, podam
adres email i spróbuje wpisać tutaj jakieś niepoprawne rzeczy. Walidacja, jak
widzisz nam działa i to jest bardzo dla nas istotne. Natomiast teraz już wpiszę nowe
hasło, jak widzisz jeszcze ten email nie został zapamiętany, a to oznacza tylko tyle
że powinniśmy sobie tutaj dodać value old. Teraz
już będzie zapamiętywany, ale spróbujmy wpisać ostatecznie hasło
jakie chcemy ustawić. Wpisałem, wciskam enter, okej
i widzimy token field is required, czyli jeszcze jedna rzecz o której zapomnieliśmy.
To dobrze, że nam się te błędy pojawiają. bo mogę ci pokazać jak je rozwiązać,
to wynika z tego, że ja tutaj nie skorzystałem ich templatek, które były wygenerowane, ale
zrobiłem to całości od nowa. Kiedy nam się wczytuje ten formularz reset,
to jest tutaj przekazywany token, który jest w adresie URL pod specjalną zmienną
i musimy tutaj jeszcze dodać ukryte pole które będzie wysłane razem z tym formularzem. Jego
name jest to token, jego wartość ustawimy
właśnie na zmienną token, która gwarantuje ci, jest tutaj przekazywana, też można
to znaleźć w kodzie tego trait'a, gdybyśmy to podejrzeli, więc jeszcze raz spróbujmy. Wysyłam i
jak widzimy znowu ten token z jakiegoś powodu nie został dodany. Odświeżmy
zatem tutaj, po prostu podejrzany co tam jest. Być może jakieś dane z sesji się zapamiętały, widzę,
że ten token tutaj jest dodawany, czyli być może to tylko jakiś chwilowy błąd. Raz
jeszcze. Jak
widzimy password reset token is invalid. Dlaczego tak się mogło stać? Zobaczmy. Być
może ten token jest tylko przez chwilę ważny. Nie jestem stu procentach pewny,
ale niewykluczone, że tak właśnie jest. Dlatego jeszcze raz sobie zrobimy
request o nowy token lub może to wynikać jeszcze z tego
że wcześniej kliknęliśmy dwa razy i dwa razy nam się wysłał ten mailtrap i
drugi token po prostu może być zupełnie inny, więc jak widzisz, mamy
trochę przygód tym wszystkim, ale być może dzięki temu lepiej zrozumiesz jak to wszystko działa,
więc spróbujmy raz jeszcze sobie zresetować hasło. Tutaj
nie naciskam już po raz kolejny, czekamy aż się ten mail wyśle. Na mailtrap'ie
on się powinien szybko pojawić. Kopiujemy ten link raz jeszcze, ten
token tutaj powinien już być w naszym ukrytym polu i ostatecznie spróbujmy
zmienić to hasło, reset password i jak
widzimy, jeszcze jakiś błąd nam się pojawił i to jest ten sam błąd, który mieliśmy
wcześniej, nie podając tutaj request przy kopiowaniu metody, natomiast wygląda na to
już wszystko jest prawie porządku. Ja tutaj skopiowałem metody, a nie skopiowałem
tego request, które się tam znajdowało. Wybacz, że tyle razy nam
coś nie wyszło, ale tak to właśnie wygląda w życiu, rzadko
udaje się zrobić od razu. Natomiast wygląda na to, że nasze hasło zostało
zresetowane, tylko że tego teraz nie zobaczymy. Jeżeli tutaj odświeżę
i jak widzisz w password reset nic nie ma, to znaczy to hasło zostało poprawnie zresetowane. Jeżeli
teraz będziemy chcieli przejść pod tą ścieżkę to automatycznie to middleware guest przekierowuje nas na stronę
główną. Ja jeszcze tylko raz, żeby potwierdzić, że wszystko działa,
będę chciał zresetować hasło. Przejdziemy
pod nowy link, który został do nas przesłany i mam
nadzieję, że po raz ostatni w tej lekcji, uda nam się to zrobić. Jak
widzisz, udało się, your password has been reset. No i mamy hasło
zmienione, po wielkich trudach, ale mamy gotowy system, który
pozwala nam się rejestrować, wylogowywać, logować, zmieniać
hasło i jeszcze będziemy chcieli dodać sobie ostatnią rzecz do tego systemu, mianowicie
potwierdzenie adresu email.