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
W tej i w kilku kolejnych lekcjach zajmiemy się stworzeniem systemu autentykacji
czyli rejestracji i logowania, przypominania hasła i weryfikacji
adresu email i powiem od razu że laravel bardzo wiele tutaj dla nas
już zrobił czyli nie musimy tej logiki pisać sami możemy ją ewentualnie
dostosować i pokażę w jaki sposób to zrobić. Natomiast zanim przejdziemy dalej chciałbym
żebyś zobaczył, co my tutaj mamy w katalogu app Http controllers
Auth, czyli tutaj nie zaglądałeśmy wcześniej. Tu mamy jeden nasz Controller, natomiast
tutaj wewnątrz jest już kilka kontrolerów i tak naprawdę mamy na przykład RegisterController. Gdybyśmy
przyjrzeli jest tutaj cała logika która pozwoli nam zarejestrować użytkownika
czyli wystarczy na ten Controller na konkretne jego metody
których jak widzisz tutaj nie ma ale zaraz ci pokażę gdzie je znaleźć wystarczy na
te metody skierować routing i na przykład wysłać formularz pod
odpowiedni adres. Wtedy użytkownik zostanie zarejestrowany. Natomiast wydaje się
że tutaj nie ma zbyt wielu metod alelaravel w PHP wykorzystuje coś
takiego jak trait'y i ty i tutaj mamy use register RegeteredUsers
i gdybyśmy tam przeszli, ja sobie wcisnę Command Shift R i tam przeskoczę
to dzięki temu dodatkowi Intellisense który mam zainstalowany i tutaj
zobaczymy całą logikę czyli taki trait to jest coś rodzaju dziedziczenia, takiej
mixiny, czyli wszystkie metody które są tutaj na tamtym kontrolerze również są i okazuje
się że tutaj już mamy pewne metody takie jak przykład show registration form
który zwraca odpowiedni widok tak dalej. My tego widoku nie mamy ale za
moment go utworzymy. Mamy metodę register i jest tutaj wszystko co jest potrzebne i
co ciekawe jeżeli na tym kontrolerze na którym jest ten trait wykorzystywany
nie ma jakieś metody. Znajdziesz ją tutaj ale chciałbyś ją dostosować to
możesz ją napisać czyli możesz całą taką metodę skopiować, wrócić sobie wtedy do
takiego register controller i po prostu ją wkleić i dostosować. Natomiast
skoro te controller'y tutaj są to musimy teraz przygotować sobie odpowiedni routing
i do tego jeszcze widoki i dobra wiadomość jest taka że jeżeli sobie przejdziemy do
naszej wirtualnej maszyny, tutaj gdzie możemy wykonywać php artisan i wpiszemy
php artisan make:auth to dla nas zostanie
wygenerowanych kilka plików. Dokładnie jeżeli byśmy sobie przeszli
do resources views, teraz się tutaj powinien jak odświeżymy, jak
widzisz pojawić taki katalog jak auth i mamy tutaj wszystkie niezbędne widoki
które będą nam potrzebne i mogłeś zobaczyć że ten trait na przykład tutaj zwraca widok auth.register,
z tym że niestety te widoki nie są zbyt dla
nas na ten moment przydatne, oprócz tego że możemy do nich zerknąć co się w nich znajduje, to
nie ma tam nic gotowego co by się przydało dlatego
że jest tutaj jak widzisz na przykład w login czy w register gotowy kod HTML i ten
kod oczywiście nie pasuje naszej strony, on pasowałby do tego pierwszego widoku Welcome
który nas powitał razem laravel'em. Co jeszcze ważne, tutaj laravel przy
tej komendzie stworzył dla nas HomeController który jest nam zupełnie zbędny, dlatego ja
ten plik teraz usunę to również by się przydało jeżeli ten widok Welcome byłby
widoczny gdybyśmy na samym początku sobie wygenerowali te widoki
to one by po prostu się ze sobą zgrywały. I kolejna rzecz jeżeli przejdziemy do web. Tutaj
nam dodał ten HomeController i on nam jest też niepotrzebny. Dlatego usunę. Natomiast
doda nam jeszcze jedno ciekawą rzecz, otóż zarejestrował nam pewne route'y,
pewne ścieżki których my tutaj nie widzimy, ale będziemy mogli je podejrzeć i albo
zostawisz to w takiej formie bo będziesz wiedział sprawdzić gdzie one są albo
sobie je tutaj przepiszesz. Ja pokażę ci jak to zrobić. Przejdźmy sobie raz jeszcze
do terminala i wpiszemy php artisan route:list. To nam
pokaże listę wszystkich zarejestrowanych ścieżek w naszej aplikacji i zauważ, że
właśnie tutaj wywołanie tej metody routes zarejestrowało kilka dodatkowych
ścieżek. Widzimy jaki to jest typ zapytania HTTP. Jaki jest
adres tej ścieżki czyli coś takiego jak wpisywaliśmy tutaj. No i widzimy jej nazwę,
to jest z kolei coś co przypisujemy w tym miejscu i widzimy na jaki kontroler
kieruje. Czyli mamy ścieżkę register, ktora nas będzie interesować i pierwsza
nich jest to taka która pokazuje formularz
rejestracji czyli showRegistrationForm. To jest dokładnie taka ścieżka
i teraz ona jest zarejestrowana Ty nie musisz tutaj nic zmieniać, natomiast ja
preferuję zawsze w tym pliku web mieć ścieżki zdefiniowane w taki sposób, dla
mnie oczywisty i widoczny, dlatego ja sobie to przepisze, nie musisz tego robić to
już kwestia twojej, twoich preferencji. Natomiast ja sobie to zrobię czyl
mamy tutaj te ścieżki, a ja mimo tego chciałbym zarejestrować sobie taką ścieżkę. To
będzie get, podać jej adres. Jak widzisz w tym
przypadku jest to register ale ja chciałbym żeby było to u nas account register. Czyli
jeżeli chcesz zmienić ścieżkę, też musisz to tutaj nadpisać i wkleimy sobie coś takiego,
czyli już nie cały ten adres, ale naszym przypadku tylko ten fragment. Czyli Auth RegisterController showRegistrationForm.
Okej, czyli teraz jeżeli przyjdziemy sobie pod adres account register, to wowała się
metoda showRegistrationForm. No i jak już widzieliśmy
na tym kontrolerze, że możemy to jeszcze sprawdzić. Jeżeli do tego trait'a sobie przejdę,
się showRegistrationForm, ona gdzieś tutaj powinna być, zwróci
na, widok auth.register. Okej czyli teraz jeszcze chciałbym nadać
jej name i nazwiemy sobie to register i teraz
jeżeli byśmy sobie przeszli do
widoku login, który będziemy musieli skopiować to będziemy mogli sobie to podlinkować,
ale zrobimy to za sekundę. Spróbujmy przejść pod account register w naszej aplikacji.
Okej,
jak widzisz taki brzydki widok się nam wczytał, więc będziemy chcieli teraz go
podmienić na nasz który wygląda dobrze. Przy okazji jeszcze jest jeden
plik wydaje mi się który będzie mogli usunąć, zgadza się app.blade, tutaj
został wygenerowany przez laravel'a który też nie jest nam potrzebny i teraz
jeżeli bym odświeżył to będzie błąd, prawdopodobnie, tak że nie mamy takiego layout'u
jak app, ale co ja chcę zrobić, ja chciałbym tutaj register który był, zmienić
jego nazwę na podkreślnik register bo to nam się jeszcze przyda w kolejnej lekcji żeby tam
zaglądnąć. Natomiast chciałbym utworzyć tutaj nowy plik register.blade.php. To
będzie ten nasz, który tutaj będzie zwracany i z katalogu HTML, to co my
tutaj mieliśmy, mamy coś takiego jak register, będę chciał skopiować sobie
tylko tę sekcję. Wklejam ją w tym miejscu, no
i oczywiście będzie nam potrzebna jeszcze cała reszta czyli może zaglądnijmy sobie,
tak jak do sekcji about, skopiujemy coś takiego. Okej,
na końcu zakończymy end section, no i tutaj wystarczy
jeszcze że wpiszemy register. Okej
ten formularz powinien się wyświetlać, jeżeli teraz tutaj przejdziemy. Zgadza się,
no i będziemy mogli dodać mu tutaj jeszcze odpowiedni parametr. Dodamy
w ogóle metodę, czyli method to będzie post. Tutaj
będziemy musieli sobie dodać jakąś ścieżkę. No właśnie ale my razie jeszcze nie wiemy
jaka ona jest więc zwracamy sobie tutaj i sprawdzamy że żeby się zarejestrować to
trzeba wysłać post'a, pod taki właśnie Controller. Znowu, on już
jest zarejestrowany i wystarczy że tutaj byśmy skorzystali z raute register i
zostanie zwrócony, bo on, bo ta ścieżka jest nazwana. W zasadzie to jest nazwana, ale
adres jest ten sam. Natomiast ja chcę znowu sobie to skopiować i tak
jak wspomniałem to tylko kwestia moich prywatnych preferencji. Chciałbym
żebyśmy tutaj zrobili account register czyli zauważ, że ścieżka
jest dokładnie taka sama, ale inny jest typ zapytania, czyli tutaj wysyłany jest get,
kiedy po prostu przeglądarką przechodzimy na tą stronę. To jest zapytanie o typie get, a
kiedy wyślemy formularz, będzie post, więc może być dokładnie taki sam adres. Okej i
jej już musimy nazywać dlatego że skorzystamy tej nazwy i zwróci nam to dokładnie
taką samą ścieżkę. Dlatego teraz tutaj powiemy, że chcemy ten formularz wysyłać pod
ścieżkę, która ma nazwę register. Okej,
jeżeli tutaj teraz przejdziemy, odświeżę, wyślę
to zobaczymy, co tutaj, co się stanie. Page Expert, no
właśnie dlaczego dzieje coś takiego? Czasami możesz coś takiego zobaczyć być
zdziwionym. Otóż, okazuje się że musimy tutaj w tym
formularzu zawsze podawać takie pole która się nazywa csrf. Jeszcze
to sobie zrobimy, a w kolejnej lekcji przejdziemy już do reszty tutaj naszego
zadania. W laraverze wystarczy wewnątrz formularza wpisze wpisać csrf,
coś takiego. Odświeżymy i teraz byśmy sobie zaglądali
tutaj do źródła strony, zobacz, to
okaże się że jest tutaj wygenerowane ukryte pole podkreślnik token i laravel
automatycznie przez jeden z middleware, czyli z takiej funkcji pośredniczących przy zapytaniu, będzie
sprawdzał czy ten token jest. Jeżeli go nie ma, to nie pozwoli nam przyjąć danych
takiego formularza i dzięki temu na przykład pod adres account register,
nie będzie ktoś mógł zewnętrznych serwerów wysyłać zapytania o typie post i się
rejestrować. Będzie najpierw musiał mieć taki token, a on jest możliwy do pobrania
wyłącznie jeżeli ktoś tą stronę rzeczywiście odwiedzi. Okej, więc teraz
jeżeli byśmy wysłali, to się okaże że nic się nie wydarzyło, ale błędu również nie
ma. Natomiast tak naprawdę pojawiają się błędy, tylko my ich nigdzie nie wyświetlamy i
tym zajmiemy w lekcji kolejnej.