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
Skoro daliśmy już do bazy danych na 2 różne sposoby ręcznie oraz z
użyciem modelu dwa wpisy to będziemy chcieli teraz móc je wyświetlić na
stronie więc tutaj jest nasza strona na razie jeszcze wszystko jest wczytywane. Jeżeli
przejdziemy do PostController, jak widzisz z tej tablicy, natomiast teraz ją będziemy
chcieli usunąć i będziemy chcieli ją zastąpić czymś innym. Tutaj
na samej górze będziemy chcieli napisać use, czyli jak gdyby zaimportować
app post. To oznacza że będziemy tutaj chcieli korzystać
z naszej klasy, czyli z tego posta. Widziałeś w poprzedniej
lekcji że za jego pomocą artisan tinker mogłem dodać wpis do bazy danych
i podobnie możemy go pobrać więc teraz naszej metodzie index mogę
powiedzieć posts równa się post, czyli odwołuje się do tego. Jeżeli
bym nie zrobił use App Post tutaj, trzeba byłoby podać oczywiście pełny namespace i
mogę skorzystać z metody statycznej all. To mi zwróci wszystkie
posty jako kolekcję i tą kolekcję przekażę tutaj, tak wcześniej. Zobaczmy
co się na naszej stronie zmieni. Jak widzisz nie zmieniło się nic ale zapewniam
cię że teraz wczytujemy wpisy z bazy danych i jeśli ten wpis tutaj na przykład zmodyfikujemy,
podając trzy wykrzykniki, to po odświeżeniu
okaże że zostało to zaktualizowane, więc bardzo dobra dla nas wiadomość, bo
mamy już dynamicznie wczytywane dane. Natomiast chciałbym tutaj jeszcze jedną
rzecz powiedzieć, to tego że być może cię to ciekawi i chciałbym żebyś wiedział
skąd to się wzięło. Mianowicie po przejściu do naszego widoku czyli
to resources views i tutaj do posts korzystamy
z for each posts as post i zapewniałem
cię i mówiłem już wcześniej że post chociaż jest jakby w tablicy, to tak naprawdę będzie
to instancja klasy, którą mamy zdefiniowaną tutaj. Czyli
jeżeli to będą jakieś metody, to w widoku one będą dostępne. Natomiast mógłbyś
się zastanawiać dlaczego for each na post działa i czym jest posts. Posts
jest tak naprawdę instancją Collection czyli takiej kasy którą laravel implementuje, a
ta z kolei klasa implementuje coś takiego jak iterator w PHP, taki
interfejs i dzięki temu można robić na niej for each. Można
byłoby również skorzystać tutaj na przykład z funkcji count która jest dostępna w PHP
i ona również poprawnie nam zadziała, okej. Natomiast
tutaj jeszcze możemy sobie zrobić if'a który pozwoli nam
sprawdzić czy jakieś wpisy w ogóle są, więc możemy napisać if count
posts większe od zera lub na takiej kolekcji można skorzystać z
metody count i w zasadzie to już tutaj
ta wartość jeżeli to będzie 1 to znaczy że jest to wartość prawdziwa ale ja sobie
dopisać to w ten sposób. Tutaj gdzie mieliśmy
and for each to w zasadzie możemy zrobić else
i musimy jeszcze zrobić na końcu oczywiście and if i
tutaj możemy sobie wyświetlić informacje o tym nie ma jeszcze żadnych
wpisów, okej. Będzie to działać poprawnie ale żebyśmy to mogli przetestować tutaj
musimy na przykład większa od 10. Sprawdźmy co nam się wyświetli. Nie dodano
jeszcze żadnych wpisów okej. Nie jest to lepiej sformatowane, ale wystarczy,
że dodamy sobie tutaj inną klasę i powinno
być zdecydowanie lepiej. Zgadza się więc zostawimy to w takiej formie. Mamy
tutaj jak widzisz już dodatkowe sprawdzenie i skorzystaliśmy z metody count. Przy
okazji zerknijmy sobie jakie metody są dostępne na kolekcjach, bo to jest coś
czego będziesz często korzystał. Tutaj na stronie dokumentacji możesz
zobaczyć wszystkie dostępne metody kolekcji. Jak widzisz jest ich wiele, ja sam nie
znam wszystkich, ale czasami kiedy widzę, że w swoim kodzie troszeczkę za bardzo kombinuje
na jakieś kolekcji to oznacza że prawdopodobnie jest tego metoda która mi ułatwi
tą moją pracę więc na przykład filter map czy wiele takich których możesz
że możesz znać z tablic, po prostu w dowolnym języku programowania więc
razie czego możesz tutaj, na tej instancji klasy
Collection korzystać tych różnych metod, okej. I na koniec tej lekcji chciałbym jeszcze z
gdzie na rzecz, mianowicie tutaj korzystamy sobie tak zwanego query
builder'a, czyli możemy tutaj tworzyć dowolne query. My powiedzieliśmy pobierz wszystkie wpisy,
ale wiem jak będzie tych wpisów dużo to na pewno nie chcemy tak robić ten sposób. Zminiemy
to później, niemniej na razie chciałbym dodać tutaj jeszcze jeden warunek i będzie to
sortowanie. Możemy na stronie dokumentacji laravel znaleźć
wszystko co jest nam tutaj potrzebne, więc ja będę chciał przejść do sortowania, czyli
będzie to tutaj. I jak widzisz mamy na przykład taką metodę jak latest
oldest, więc jeżeli tutaj powiemy latest to zwróci nam wyniki posortowane
od najnowszych a oldest to od najstarszych. Natomiast będzie startował
domyślnie tak jak tutaj jest napisane po created at, a ja mówiłem że to daliśmy
sobie swoją własną date po to żebyśmy w razie czego mogli
ją zmieniać i po niej sortować więc jeżeli tutaj metody przekażemy nazwę pola
z bazy danych to po nim będzie to sortowanie się odbywać więc możemy tutaj przed
all powiedzieć latest, w ten
sposób i podać date, że po dacie mają zostać posortowane, okej. I teraz
mógłbyś zapytać czy to zadziała. Sprawdźmy. Jak widzimy
nie, okej. Zrobiłem tutaj błąd oczywiście, sprawdzimy czy
samo latest wystarczy. Nie wystarczy. No właśnie z jakiego powodu? Chciałbym
ci jeszcze na końcu na tutaj pokazać. Otóż to jest tylko przygotowanie
query. Kiedy korzystaliśmy z all, to oznaczało pobierz wszystkie. Natomiast jeżeli
powiemy latest to tylko ustawia pewien parametr na naszym query builderze i
dopiero musimy na końcu powiedzieć, bo tutaj możemy wiele rzeczy ustawić,
możemy jeszcze powiedzieć where, podać jakiś parametry i tak dalej. Będziemy to robić później. Na
końcu musiałem powiedzieć get, pobierz wszystkie i dopiero teraz nam to poprawnie
zadziała i będzie posortowane po dacie i kończąc tą lekcje, pokażę ci
jeszcze jeden ciekawy trick, gdybyś chciał zobaczyć jakie zapytanie SQL
będzie wykonane to możesz zamiast get powiedzieć tu SQL,
tylko gdzieś ten string musisz wyświetlić i teraz okazuje się, że w
laravel, jeżeli z takiego kontrolera zwracamy view to
będzie wyświetlony widok. Natomiast jeżeli zwrócimy dowolny string to on zostanie
wyświetlony w przeglądarce, dlatego jeżeli tutaj zrobimy tu SQL i tu zwrócimy,
to po przejściu zobaczymy ten string w przeglądarce i jak widzisz to
jest dokładnie query, które musielibyśmy napisać po to, aby zwrócić wyniki,
które tutaj będą dla nas zwrócone, więc to taki mały tip, który być ci się po
prostu przyda. Na razie zmienimy to na get i mamy tutaj pobieranie wszystkich wpisów
i są one sortowanie po kolumnie date, którą to my ręcznie daliśmy sobie
jako dodatkowe pole do naszego modelu.