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
Brakuje nam jeszcze jednej rzeczy, mianowicie możliwości upload'u obrazków
na serwer i przypisywania ich do wpisów i tym zajmiemy się w tej i kolejnej
lekcji. Rzecz jeżeli chodzi o laravel jest bardzo prosta, tutaj naprawdę
jest bardzo wysoka warstwa abstrakcji i bardzo przyjemnie się z tym pracuje. Natomiast, żeby
zrozumieć co tutaj będziemy robić musimy umówić sobie filesystems. Jeżeli
przejdziemy do config filesystems, to okaże się, że laravel
definiuje kilka takich filesystemów, ale my możemy dowolną liczbę tutaj
sobie zdefiniować i teraz co to oznacza? W skrócie wygląda to tak, że mamy pewne
metody laravel'a zawsze dokładnie takie same, które pozwalają
nam zapisywać pliki i te pliki odczytywać czy usuwać i dlaczego
te metody zawsze są takie same? Otóż, po to żeby się łatwo nich korzystało,
ale za pomocą tych metod można zapisywać pliki lokalnie na dysku, można
je zapisywać na dropbox'ie w chmurze S3 i tak dalej. Czyli warstwa abstrakcji
jest bardzo duża, bo pod spodem wykorzystywane są odpowiednie driver'y i
mnóstwo takich driver'ów, sterowników znajdziesz również na githubie. Społeczność
je tworzy, praktycznie do każdego jakiegoś hostingodawcy
czy do każdego, do każdej chmury, znajdziesz odpowiedni driver,
czyli mam jakąś metodę, która, której mówimy Zapisz mi plik albo
pobierz mi plik. Daj mi do niego ścieżkę a ta medodaa pod spodem, ona może
korzystać z różnych sterowników i zapisywać ten plik albo u nas lokalnie na
dysku albo na przykład na dropbox'ie. My będziemy skorzystać z dysku,
który nazywa się public, tutaj te dyski są zdefiniowane. Jeżeli byś dodawał inne to tutaj trzeba
jej zdefiniować, na przykład jak tutaj widzisz, FTP, SFTP, jest tego
całe mnóstwo i teraz my chcemy zdefiniować sobie jako dysk
public, jako ten który jest domyślny, żebyśmy za każdym razem za moment nie musieli podawać, że
chodzi nam o publiczny i jak widać publiczny korzysta z drivera local, czyli
zapisuje lokalnie u nas na dysku, na serwerze. Gdzie zapisuje,
storage path, a storage path po prostu zwraca nam ścieżkę,
to jest taka funkcja pomocnicza laravel'a do storage i następnie
app public. Tutaj jest taki katalog public, ten katalog musi być odpowiednio podlinkowany
później, co zrobimy w kolejnej lekcji do naszego katalogu public, który jest w
tym miejscu, ale app public to właśnie tam będą umieszczane pliki jeżeli skorzystamy
publicznego dysku. Jak one będą zwracane? Otóż APP_URL,
czyli cały adres URL aplikacji jaką mamy, w naszym wypadku larablogger.test
ukośnik storage i dopiero później to co będzie app public. No i
tyle w zasadzie jeżeli tutaj chodzi o te rzeczy, ale musimy sobie skonfigurować, żeby ten
dysk był dyskiem domyślnym i teraz jeżeli zobaczymy, który jest domyślny
dysk, czyli default to nam pobiera z pliku env zmienną
FILESYSTEM_DRIVER. Domyślny jest ten local, czyli on by zapisywał
wtedy w storage app a to nie będzie dla nas publiczne. My
chcemy zapisywać właśnie tutaj storage app public, dlatego będę chciał
go zmienić. Nie będę podmieniał tutaj, ale przejdziemy do pliku konfiguracyjnego env i
po prostu gdzieś tutaj sobie to dodamy FILESYSTEM_DRIVER ustawimy na public
i od tej pory będzie to tutaj już przypisywane i za każdym razem
kiedy będziemy korzystać z odpowiednich metod, będzie to zapisywane na dysku public, czyli
dokładnie pod taką ścieżkę i teraz jaki sposób przesłać plik
na serwer. Z punktu widzenia formularza, który mamy przykład w create oraz edit
robimy to bardzo łatwo. Mamy tutaj dodane takie pole jak
image i jest to input o typie file i ma nazwę, czyli jeżeli wybierzemy plik i
wyślemy, przeglądarka automatycznie wyślę go na serwer, ale żeby nam to poprawnie mogło
działać musimy do formularza dodać specjalne atrybut i wygląda
on następująco enctype multipart form-data. To samo musimy dodać
do edit, bez tego po prostu nie będzie nam to poprawnie działać z laravel'em tutaj. Jeżeli
coś takiego dodamy, a już te obrazki możemy wysłać na serwer i teraz
jeśli wyślemy na serwer to będą one oczywiście w kontrolerze
dostępne zajmiemy się najpierw kontrolerem, który mamy tutaj i jest
to store gdzie dodajemy nowy wpis. Na tym etapie będziemy mogli
przechwycić sobie obrazek, ale wcześniej chciałbym jeszcze odpowiednio to
zwalidawać bo image wcześniej walidowaliśmy jako nullable, czyli on nie musi
być podany, ale jeśli jest podany, chciałbym żeby był on o typie image, taką
regułę walidacji na stronie dokumentacji laravel'a znajdziesz i chciałbym żeby miał
on maksymalnie 1024 kilobajty, czyli po prostu jeden
megabajt. Jeżeli będzie większy, jeżeli nie będzie miał mimetype o typie
image to prostu nam tutaj laravel go odrzuci. Na tym etapie wiemy
już walidacja przeszła więc będziemy się mogli odwołać po prostu do data image
i ten obrazek sobie zapisać. Zrobimy to w bardzo prosty
sposób. On nam zwróci ścieżkę. Dlatego chcę ją przechwycić do zmiennej, odwołamy się
do request, następnie do fire i image. Dlaczego image? To
jest nazwa pola, które zdefiniowaliśmy, więc jeżeli pole nazwałem name image to
odwołuje się do image. Mam taki oto plik i mogę bezpośrednio tutaj
powiedzieć store i skorzystamy właśnie w laravel ze storage, o
którym mówiłem przed momentem, który pozwala nam zapisywać pliki na dysku, ten dysk
może być dysk lokalny lub na przykład Dropbox i możemy to zapisywać
jeszcze na inne sposoby, później się tym zajmiemy, zobaczysz taką fasadę storage. Ale
to jest najprostszy sposób i dlatego zdefiniowaliśmy domyślny dysk żeby
tutaj nie musieć definiować w którym dysku po to byśmy musieli jeszcze napisać disk public,
więc store. No właśnie i gdzie go chcemy zapisać, w photos. To
oznacza że na dysku public, który jest domyślny, czyli jeśli jeszcze raz wrócimy do filesystems, filesystems,
mamy tutaj dysk publiczny, to będzie app public i następnie
katalog photos się tam utworzy, bo tak tutaj powiedzieliśmy. Zwróci nam to ścieżkę
i tą że ścieżkę chcemy zapisać w bazie danych. Zatem odwołamy
się do danych, które już mamy zwalidowane. Tam było image i to image po będę
chciał ustawić na path i wiemy, że to się zapisze w bazie danych. Natomiast ważne
jeszcze tutaj żeby sprawdzić czy w ogóle ten obrazek przyleciał do nas z przeglądarki,
dlatego że jeżeli nie, to tutaj będzie błąd, a więc zróbmy sobie tutaj if'a, If
isset data image, jeżeli
on tam się znalazł, to tylko wówczas chcemy wykonać
taki kod. Ja chciałbym ten kod również skopiować
sobie do metody update, którą tutaj mieliśmy, bo będzie to wyglądać
tak samo, więc troszkę się tutaj pobiera tego kodu, ale nie jest źle tak
to będzie wyglądać i tam powinno dodać wpis dodać
obrazki do tego wpisu i zapisać je i na dysku i odpowiednio w
bazie danych. Sprawdźmy zatem jak to będzie wyglądać, przyjdziemy do create
i uzupełniamy sobie jakiś wpis, wybierzemy
typ. W naszym przypadku photo, bo tylko wtedy będziemy w przyszłej lekcji wyświetlać
te obrazki i wtedy nie musimy podawać content
i wybiorę plik. Mam takie dwa obrazki już tutaj zdefiniowane. Pobierz
sobie dowolny obrazek, który ci na stronie główne na naszej stronie wyświetla i po
prostu możesz go tutaj dodać i spróbujemy zrobić Add post, zobaczymy czy nam
to zadziała. Udało się Post has been added. No właśnie, więc teraz
sobie zajrzymy do bazy danych, do wpisów. Odświeżymy tutaj, dodał
nam się taki oto wpis i on zauważ, w image, ma zwrócone photos ukośnik
i tam jest taka dziwna długa nazwa, bo laravel generuje taką nazwę automatycznie. W razie
czego można zachować oryginalne nazwy, ale w naszym przypadku nie jest to konieczne. Więc
ona się tutaj zapisała i teraz co jest super istotne, jeżeli byśmy podejrzeli sobie
katalog storage app public, utworzył się katalog photos i jest tutaj
nasz obrazek, czyli on się na serwer rzeczywiście wgrał i ten katalog storage ja
już o mówiłem na początku kursu nie jest zapisywany repozytorium git'a w razie czego. On
będzie udzielony przykład na serwerze. Robimy nowy deploy, czyli nową
wersję naszej aplikacji, a ten katalog pozostaje, żeby zachować wszystkie na
przykład pliki, które nim się znajdują. Jak zatem widzisz to działa i
teraz jeżeli byśmy przeszli do edycji takiego wpisu, ten obrazek
chcieli zaktualizować, czyli wybierzemy nowy. ja mam tutaj drugi
obrazek zrobię update, również
się przesłał i będzie w porządku. Jeżeli tutaj odświeżymy to będzie tutaj już
inna ścieżka. Problem jest tylko taki, że dwa obrazki zostały, jeżeli zaktualizowaliśmy to poprzedni
można usunąć. Tym się zajmiemy później. Natomiast w kolejnej lekcji pokażę ci
w jaki sposób możemy te obrazki wyświetlać na stronie.