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
Nasza strona wyświetla już dynamiczne dane, więc kolejnym krokiem będzie wyświetlenie
pojedynczego wpisu i przy takiej operacji znowu
poznasz kilka koncepcji laravel'a, więc będziemy chcieli mieć jakąś ścieżkę w
naszym będzie to ukośnik posts i później ukośnik id, takiego wpisu. Będziemy
chcieli żeby on nam wyświetlił więc żeby to zrobić przejdziemy najpierw to web i musimy
utworzyć nowy kontroler. W zasadzie nawet nie kontroler, ale ścieżkę do kontrolera,
a tam metodę i teraz jeszcze jedna rzecz o której nie mówiłem wcześniej. Tutaj jeżeli
piszemy get to oznacza że na zapytanie http o typie get
odpowie ten kontroler. Jeżeli byśmy wpisali post to ten kontroler odpowie
tylko jeżeli będzie tutaj zapytanie o typie post. Warto
wiedzieć to nie przypadkowe te słowa tutaj są. Będziemy chcieli mieć coś
takiego jak posts i następnie id, więc możemy podać
w takich nawiasach klamrowych nazwę parametru. To oznacza, że jeżeli
ktoś pisze na pasku przeglądarki post ukośnik cokolwiek to to cokolwiek pod zmienną id
będzie u nas dostępne w metodzie, którą tutaj podamy. Jeżeli
index wyświetla wszystkie wpisy, wszystkie zasoby to show wyświetla pojedynczy
zasób i jest to konwencja o której mówiłem ci wcześniej. Dlatego na post controller
będziemy chcieli utworzyć publiczną
metodę show i ona
będzie przyjmować id. Ta nazwa powinna być zbieżna z tym
co podaliśmy tutaj jako parametr. To id na początek może spróbujemy sobie po prostu
zwrócić, wiemy, że jak z kontrolera zwrócimy string, to on po prostu się pojawi nie w
przeglądarce, więc wpiszmy sobie tutaj posts, na przykład 1. Jedynka została
zwrócona, oczywiście w przypadku dwójki będzie to dwójka. Nie tutaj żadnego sprawdzania
czy jest to number czy nie. Jednak możemy sobie to przechwycić
i teraz będziemy chcieli znaleźć sobie i zapisać pod zmienną taki
post który ma id. Oczywiście jeżeli zerkniemy
do naszej bazy danych to mamy takie wpisy. Czyli
mamy jeden wpis który ma id 1 i teraz żeby go znaleźć, na to jest kilka sposobów. Możemy
tutaj w tym query builderze powiedzieć na przykład where id równa
się przekazane id. Następnie first. Dlaczego
First? Bo potrzebujemy znaleźć tylko jeden element. Wiemy, że to będzie jeden element i first zwraca nam
od razu model na którym możemy zrobić na przykład title. Jeżeli z kolei tutaj
byśmy skorzystali z get, to to nam zwraca kolekcję i na kolekcji dopiero musielibyśmy
iterować. To jest jednym ze sposobów, aczkolwiek można to jeszcze
zrobić inaczej. Zamiast podawać tutaj where id można
użyć takiej magicznej metody where id. Tutaj możesz podać cokolwiek, tutaj
może być where name i wtedy jeżeli taki post ma coś takiego
jak name, czy w naszym przypadku title, to zostanie to automatycznie znalezione. Natomiast
zamiast where id jeszcze zrobimy inaczej. Ja ci po chcę pokazać kilka możliwości. Jeżeli
wyszukujesz po id, to po prostu mamy taką metodę jak find ta metoda
znajdzie nam ten właśnie element i zwróci go jako model, więc teraz
będziemy go chcieli przekazać do widoku i musimy sobie utworzyć widok pojedynczego
posta i tak jak wyżej będziemy tam chcieli przekazać post. Okej,
zatem przejdźmy sobie do naszych widoków, one są dokładnie w resources
views i mamy tutaj pages, post, zduplikujemy sobie taką stronę i nazwiemy
ją post. Jak widzisz to jest dowolne. Teraz co
tutaj będziemy chcieli zrobić, widzisz, że przekazywaliśmy do głównego layout'u
tytuł jako post. Teraz już będziemy mogli ten tytuł przekazać dynamicznie, czyli post title,
bo będzie ta zmienna post tutaj dostępna. Następnie nie będziemy mieli już
tego sprawdzenia i nie będziemy mieli for each bo jest nam to
niepotrzebne, dlatego możemy spokojnie to usunąć, okej
i w zasadzie wszystko powinno zostać bez zmian i
powinno nam zadziałać, więc zobaczmy teraz kiedy będziemy chcieli przejść pod posts 1,
co się wydarzy. Jak widzisz dokładnie tak stało. Tutaj na pasku, na odpowiedni
tytuł i ten wpis został dla nas wyświetlony. Oczywiście tutaj nie jest potrzebne
już keep reading, więc będziemy mogli się po prostu tego pozbyć, a zatem
znajdźmy gdzie to się znajduje. Jest to tutaj i usuńmy,
okej. Teraz to wygląda zdecydowanie lepiej. Sprawdźmy
post 2, powinien to post, który ma zdjęcie. Dokładnie
tak też się stało. Jest zdjęcie poprawnie tutaj wyświetlane. Co
natomiast się stanie jeżeli wpiszemy tutaj id posta który nie istnieje. Jak
widzisz mamy błąd, dlatego że próbujemy się odwołać title na nie
obiekcie. Prześledźmy co tutaj się wydarzyło. Metoda find, jeżeli
nie znajdzie nam odpowiedniego modelu zwraca null. My to null przekazaliśmy tutaj jako
post, a w tym miejscu na tym null próbujemy wywołać title, dlatego w
takim przypadku powinniśmy zwrócić błąd 404. Można to zrobić dwa
sposoby. Pierwszy jest taki że jeżeli is
null post, to możemy zrobić return
abort, jest to funkcja którą laravel również nam tutaj udostępnia
i powiedzieć 404. Zobaczmy, jak widzisz
błąd 404 został zwrócony. To jest pierwsza rzecz, ale można to zrobić
dużo prościej. Możemy od razu skorzystać z metody find or fail. Czyli
jeżeli się nie uda znaleźć to on tutaj zwraca exception, i ten exception jest
przechwytywany i wyświetlany jest wtedy błąd 404. Zobaczymy,
dokładnie to się wydarzyło w przypadku dwójki. Tego problemu już
nie będzie. Na koniec pokażę ci jeszcze dwa ciekawe triki. Nie będziemy
jej poświęcać osobnych lekcji. Jeżeli pobierzesz sobie jakiś model i chciałbyś go wyświetlić w
taki fajny sformatowany sposób, laravel udostępnia ci funkcje DD czyli
die dump i możemy zobaczyć co wtedy się stanie. Jak widzisz
w taki fajny sformatowany sposób wyświetli się cały nasz model i możemy zerknąć co
się w nim znajduje. To jest pierwsza rzecz, a druga bardzo ciekawa rzecz jest taka,
że pokazałem ci że jeżeli zwracamy z kontrolera view, to wyświetla nam się
to jako kod html. Jeżeli zwracamy sobie string to prostu pojawia
się w przeglądarce. Natomiast jedną bardzo fajną rzecz w laravel'u jest to że
jeżeli zwrócisz obiekt lub kolekcję w ten sposób, z takiego kontrolera,
to zostanie on skonwertowany na json i w moim przypadku jest on ładnie formatowany
za pomocą odpowiedniego dodatka do Chrome. Gdybyśmy tutaj podejrzeli
jeszcze co jest w network to już tylko taka ciekawostka. Zobaczysz,
że laravel również odsyła nam to z serwera jako
content type application json. Warto o tym wiedzieć jeżeli chcesz sobie coś
podejrzeć lub jeżeli będziesz tworzył API gdzie chcesz wracać po prostu json'owe
rzeczy. Nie musisz w żaden sposób ich konwertować. Po prostu zwróć obiekt lub kolekcję i
zostanie to automatycznie zamieniane na json.