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 lekcji krótko omówimy katalogi które tutaj się znajdują, żebyś nie
czuł się tak bardzo przytłoczony. Więc najważniejsze dla nas katalog to jest app i
to jest katalog w którym będziemy tworzyć całą naszą aplikację. Czyli możesz pomyśleć że to
jest katalog z kodem źródłowym naszej aplikacji. Tutaj będziemy tworzyć aplikacje, za
sekundę do niego wrócimy. Mamy katalog bootstrap z którym praktycznie nic
musimy robić. To jest taki katalog z plikami który rozpoczyna jakby naszą
aplikację, cały jakby cykl życia tej aplikacji. To tak naprawdę nie jest nas
istotne. Katalog config jest to zbiór plików wyłącznie konfiguracyjnych,
więc do nich od czasu do czasu będziemy zaglądać, coś dopisywać lub nawet będziemy
dodawać własne czyli tutaj nie ma absolutnie nic skomplikowanego. Te pliki konfiguracyjne
zawsze zwracają taką tablicę asocjacyjną, gdzie mamy klucz
i wartość. Co ciekawe zazwyczaj zobaczysz taką funkcję
env, którą ddoaje nam laravel i jest to funkcja która pozwala pobierać
wartości z pliku kropka env. Do tego pliku jeszcze będziemy
wracać. Czyli jeżeli tutaj mamy na przykład tutaj mamy APP_NAME równa się laravel, to
możemy za pomocą funkcji env powiedzieć
APP_NAME i to nam zwróci dokładnie ten string. Natomiast drugi parametr tej funkcji to zawsze jest
wartość domyślna, na wypadek gdyby piku kropka env nie było APP_NAME
to zostanie tutaj podstawione to co zostanie podane w tym miejscu więc w
tej funkcji możemy korzystać w dowolnym miejscu ale nie jest to zalecane dlatego
że kiedy wrzucimy naszą aplikację na produkcję to wtedy będziemy zapisywać w
pamięci podręcznej cały nasz plik konfiguracyjny i ta funkcja nie będzie zwracać
zaktualizowanych danych ale tym jeszcze będziemy sobie mówić także warto zapamiętać
że z tej funkcji najlepiej korzystać wyłącznie w plikach katalogu config i tutaj
nie ma zupełnie nic skomplikowanego. Wszystkie rzeczy które tutaj się znajdują
to do nich będzie się można odwołać za pomocą funkcji i ta funkcja
wygląda ten sposób config i następnie podajemy nazwę
katalogu czy nazwy pliku. Na przykład app kropka name i
zostanie nam zwrócone to co jest podstawiane w tym miejscu czyli w dowolnym w naszym kodzie
poza tymi plikami, jak skorzystamy config app name to oznacza wejdź do
katalogu config, znajdź plik app a w tym pliku w tablicy która jest
zwracana znajdź klucz name i to co pod nim będzie jeżeli to będą zagnieżdżone
rzeczy to można je następnie łączyć czyli jak widzisz nie jest dla nas straszny
zupełnie ten katalog config, wyłącznie rzeczy konfiguracyjne się tutaj znajdują
i one są pobierane z pliku kropka env zazwyczaj aczkolwiek
mogłyby również tutaj być wpisane na sztywno. Następnie mamy katalog
database i będziemy z niego korzystać wtedy będzie jaśniejsze o co chodzi. Generalnie tutaj
będą migracje, które pozwolą nam określić jak ma wyglądać nasza
baza danych. Nie będziemy tworzyć nic w naszej bazie danych wpisując polecenia
czy zapytania MySQL'owe SQL'owe. Tylko będziemy
to za pomocą takich oto schematów imigracji, więc one będą definiowane właśnie
w tym katalogu, factories z tego też będziemy korzystać to
pozwoli nam kolei tworzyć na przykład fejkowe dane które będą
do naszej bazy danych wrzucane jedną komendą żebyśmy nie musieli tworzyć przykład 10
postów do przetestowania naszego bloga, to taka fabryka pozwoli nam
je stworzyć. Ona pozwoli nam stworzyć z kolei, seed czyli seedery
pozwolą nam je wrzucić do bazy danych. Wszystko to będziemy robić już niebawem więc
to stanie się jaśniejsze. Następnie mamy katalog public i to jest jedyny
katalog który jest jakby dostępny z zewnątrz a więc po wrzuceniu tej
aplikacji na serwer wszystkie zapytania są rotowane do katalogu public do
pliku index.php czyli jeżeli tutaj mamy na przykład csc czy js to
wyobraź że na naszej domenie ukośnik CSS to
jest dokładnie ten katalog. Tutaj mamy forbidden bo nie możemy listować katalogu
ale jeżeli wpiszemy sobie nazwy pliku który tam się znajduje czyli app.css
to on jak najbardziej się wyświetli. Natomiast nie ma żadnej możliwości z
zewnątrz aby przejść do jakiegokolwiek innego katalogu niż public i to
jest nas istotne że wszystko co jest innych katalogach jest bezpieczne. Może
tam być trzymane więc tutaj będziemy umieszczać rzeczy które chcemy żeby były dostępne publicznie.
Jak widzisz jest to na przykład CSS JavaScript czy wszelkiego rodzaju
obrazki. Katalog resources nie jest dostępny publicznie i w nim
możemy trzymać kod źródłowy naszych aplikacji, czyli na przykład kody JavaScript
który będzie kompilowany do wynikowego JavaScriptu. Możemy
trzymać tutaj Sass z którego będziemy też korzystać i to już zależy od tego na
jakim poziomie jesteś jeżeli chodzi o tworzenie frontendu. Na ile jesteś zaznajomiony
z tym workflow które we frontendzie się pojawia ale zapewne widziałeś już nie
raz że może mieć wiele plików Sass, wiele modułów JavaScript'owych, ale
koniec są one kompilowane do pojedynczych plików i będą one Tutaj
wstawiane, więc to jest kod źródłowy naszej aplikacji. Dodatkowo język
jeżeli chcielibyśmy stworzyć wielojęzykową aplikację i widoki. Wszelkie widoki
to są pliki blade.php i będziemy
o nich jeszcze mówić kolejnych lekcjach ale generalnie to są widoki naszej aplikacji,
a więc to co widzieliśmy na stronie głownej to jest właśnie taki widok.
Welcome blade. Jeżeli cokolwiek w nim zmienimy na przykład tutaj. Dodam
trzy wykrzykniki zapisze i otwieram naszą aplikacje to
możesz zobaczyć że zostało to dodane w tym miejscu czyli to będą widoki html
naszej aplikacji w których będziemy mogli wykorzystywać takie oto dyrektywy
blade o których będzie później i w zasadzie jeżeli chodzi o resources to jest wszystko,
routes to jest katalog z kilkoma plikami do tworzenia
routingu naszej aplikacji. Nas tak naprawdę będzie interesował głównie plik web
i on definiuje pod jakim co się znajduje. Zauważ, że
tutaj pod głównym adresem czyli slash zwracamy
widok Welcome, a więc jeżeli przejdziemy naszą główną stronę, załadował się
widok Welcome i możesz się domyślić ta nazwa ma coś z views, Welcome
blade php. Dokładnie tak jeżeli tutaj napiszemy about, to tutaj
musimy mieć plik about blade PHP i również niebawem będziemy z tym
pracować, a więc routing znajduje się w routes i te pliki tak
naprawdę są tutaj różne tylko dlatego że na przykład do
tych webowych czyli można powiedzieć takich zwykłych w naszym serwisie, są przypisane
inne middleware, a więc takie funkcje pośredniczące niż na przykład do
tych które są tutaj w API, a więc może być tak że wszystkie ścieżki zdefiniowane w
API tutaj tym pliku tak naprawdę będą jeszcze przechodziły przez pewien taki nadzór.
Czy ktoś ma możliwość podejrzenia tego API czy nie ma i tak dalej.
Natomiast same pliki są dosyć proste i będziemy do niej jeszcze później wracać. Katalog
storage jest to katalog który jest wykluczony w gitignore i
to oznacza że nie ma tutaj żadnych plików które tworzyły by naszą aplikację
w taki sposób źródłowy. Tutaj mogą znajdować się pliki które będą
w naszej aplikacji plikami użytkownika na przykład wgrywane przez użytkownika
obrazki, avatary i tak dalej i jak byśmy już wybiegli w przyszłości i
pomyśleli o tym że nasza aplikacja będzie hostowana na jakim serwerze to
ten katalog będzie specjalnie z tym linkowany czyli powiedzmy na serwerze mamy wiele
avatarów użytkowników i tak dalej. To nie jest zapisane w repozytorium. Później
wrzucamy nową wersję naszej aplikacji, wszystkie te pliki które tutaj mieliśmy są nowe. Dodaliśmy
jakieś nowe funkcje ale katalog storage pozostaje ten sam po
to żeby aplikacja mogła korzystać na przykład tych avatarów czy z innych obrazków które
tam są podlinkowane, więc jest to katalog do przechowywania właśnie
takich stałych plików. Framework tutaj przechowuje sobie takie rzeczy jak pamięć podręczną
i tak dalej. Zupełnie ten katalog nas nie interesuje, nic w nim nie będziemy
robić. Jeżeli chodzi o logi to tutaj będą logi z błędami z serwera
lub inne logi informacyjne które będziemy sami ustawiać w kodzie. Katalog
app to jest katalog właśnie dla nas tak jak wspomniałem public, jeżeli odpowiednio go później
podlinkujemy, to mogą tutaj być obrazki, avatar'y użytkownika, czyli
wszystkie rzeczy, które są potrzebne dla naszej strony internetowej ale nie są jej kodem
źródłowym. Katalog test tutaj piszemy testy jednostkowe
dla naszej aplikacji. Akurat w tym konkretnie nie będziemy zajmować się w tym
kursie, ale gdybyśmy to robili one znalazłby dokładnie tutaj. No i katalog
vendor to jest również katalog którym nic nie będziemy zmieniać. Tutaj są zainstalowane wszystkie
zależności z composer'a więc jeżeli z kolei masz doświadczenie bardziej
z frontend'em to katalog node modules to jest dokładnie coś takiego jak tutaj
vendor. Można tam podejrzeć, można zaglądnąć ale nic tam nigdy nie zmieniamy i ten
katalog również nie jest w repozytorium dlatego że można użyciem composer install zawsze
zainstalować wszystkie zależności i on zostanie utworzony. Pozostałe
pliki nie są jakoś bardzo istotne editorconfig możesz spokojnie usunąć. Jest to
plik który jeżeli twój edytor ma zainstalowany odpowiedni dodatek to będzie
te ustawienia ustawiał dla tego projektu jeżeli chodzi plik env
to tutaj będziemy definiować różne ustawienia, będziemy do niego wracać. Plik
nie env example to jest taki plik właśnie jak z modyfikujemy sobie env i
chcemy sobie sprawdzić jak coś wyglądało w oryginalnym to możemy w tym example podejrzeć. On
sam nie robi nic. Pliki gita mamy tutaj, następnie mamy artisan i
jest to plik PHP wykonywany z którego będziemy wielokrotnie korzystać później
wpisując php artisan. Plik composer'a to są właśnie te zależności
wszystkie których ten framework wymaga. Pakiet json to są z kolei zależności
dla frontendu, będziemy również później tym pracować, a więc jak
będziemy je instalować to katalog node modules tutaj się pojawi phpunit
to do testów jednostkowych i tak naprawdę wiele wiele
rzeczy które tutaj są nie będą nam jakoś specjalnie potrzebne, server to do uruchomienia
lokalnego serwera, webpack mix to jest do frontend'u o czym będzie
później i yarn lock to również do frontend'u ten plik również możesz spokojnie
usunąć i nic złego się nie wydarzy. Okej, mam nadzieję że z
grubsza zobaczyłeś co tutaj jest. Przejdźmy jeszcze na sekundę do katalogu app gdzie
będzie cała logika naszej aplikacji, Dla nas to jest bardzo ważny katalog, bo
na przykład w konsoli będziemy mogli tworzyć komendy wykonywane właśnie
z wiersza poleceń, będzie o tym później exeptions będziemy mogli tworzyć chociaż
nie robi się tego super często. Własne klasy wyjątków, ale
co ciekawsze w http będziemy tworzyć wszelkie nasze kontrolery middleware i
tak dalej, w providers będziemy tworzyć provider'y. Na razie
nic ci to mówi ale do tego przyjdziemy swoim czasie więc tak naprawdę ty nie musisz znać wszystkich
tych katalogów, wiedzieć po co są. Natomiast z grubsza powiedziałem ci jak
to działa. Bezpośrednio w katalogu app jeżeli mamy plik php
to jest to nasz model, czyli mamy framework MVC model. To
jest model użytkownika który tutaj już był następnie view czyli widok
to jest resources views i controller jest w app http
controllers, okej. Mam nadzieję że ci nie przytoczyłem te wprowadzeniem. Nie
ma tutaj nic co jest specjalnie skomplikowane, ale jak będziemy tworzyć aplikacje
w tym kursie to będziesz po kolei widział gdzie co wpada bo
czasami skorzystamy jakieś komendy która nam wygeneruje jakieś dodatkowe plik lub folder, folder wewnątrz
aplikacji app, wewnątrz tego folderu i wtedy
będziemy mogli omówić skąd to się wzięło. To za tym tyle jeżeli chodzi o taką ogólną
strukturę tych plików. W kolejnej lekcji zajmiemy się jeszcze skonfigurowaniem
bazy danych a potem już skoczymy prosto do tworzenia naszej aplikacji.