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 pokażę ci jaki sposób w laravel działają relacje
czy jak możemy ustawić relacje pomiędzy tabelami tak aby
w tej konkretnie lekcji przypisać autora do wpisu. Relacje
bardzo dokładnie są opisane na stronie dokumentacji, więc w razie czego o zachęcam cię
żebyś tutaj zerknął. Jak widzisz mamy różne typy relacji takie jak 1 do 1,
1 do wielu i tak dalej. Jeżeli miałeś do wcześniej
już z SQL'owymi bazami danych to na pewno mniej więcej wiesz na czym polegają
relacje. Dzięki relacjom możemy mieć tabelę na przykład users
gdzie mamy wszystkie dane użytkownika i oprócz tego może mieć tabelę
post i możemy post skojarzyć z użytkownikiem za
pomocą wpisania w tabeli post po prostu user id. Dzięki
temu nie musimy tam wpisywać danych autora tylko kierujemy
poprzez jego id do odpowiedniego rekordu w tabeli users dokładnie
coś takiego będziemy chcieli zrobić. Pokażę ci jak laravel nam to może
ułatwić. Natomiast żeby to wszystko mogło poprawnie działać to my potrzebujemy w naszej
tabeli posts, gdzie mamy dodać sobie coś takiego jak user
id, czyli przy każdym wpisie musimy mieć identyfikator użytkownika
który go utworzył. Więc potrzebujemy migracji żeby coś takiego dodać
przyjdziemy sobie do konsoli tutaj i stworzymy nową migracje. Czyli już
wiesz jest to php artisan make migration i nazwiemy ją
na przykład add_user_id_field_to_posts_table. Podamy tutaj tabelę
posts i taka migracja nam się pojawi
oczywiście jak database migrations. Ona jest tutaj i będziemy
sobie chcieli coś takiego dodać, table i ważne jest to, że
powinno to odpowiedni sposób skojarzone, żeby nam wszystko dobrze
działało, więc musimy sobie zerknąć do tabeli users. Mamy tutaj
taką tabelę i widzimy, że id jest to bigIncrements, to
się zmieniło jakiś czas temu w laravel. Jest to taki nowy format,
dlatego musimy do tego się dostosować i co
to oznacza, otóż musimy sobie tutaj zrobić unsignedBigInteger, dokładnie w
ten sposób, czyli unsigned to oznacza, że nie ujemna liczba i coś
takiego tutaj będziemy chcieli dodać o nazwie user_id. Takie pole chcemy dodać
after, na przykład id. Czyli
jeżeli zerkniemy na tabelę posts, to tutaj po id chciałbym dodać user_id,
okej. Powinno być porządku, jeżeli sobie zrobimy php
artisan migrate, powinien tu się dodać, zerknijmy
sobie. Jak widzimy, jest, wszędzie mamy wartość 0, ale
za moment sobie to odpowiednio dostosujemy. Będę chciał teraz właśnie zmodyfikować
na sekundę factory, które mamy dla
PostFactory i tutaj będziemy chcieli przepisywać jakiś user_id. W
naszym przypadku testowo, dodamy sobie tutaj 1, czyli będzie to admin,
bo wiemy, że tylko admin w naszym przypadku może tworzyć nowe wpisy i jego id to będzie
1, więc zróbmy to właśnie tak i będziemy mogli teraz wykonać
od nowa wszystkie migracje, więc zróbmy php artisan
migrate:fresh, żeby
wszystko wyczyścić i zrobimy sobie php artisan db:seed, dzięki tym seeder'om
jak widzisz, tak naprawdę nic nie tracimy. Wszystko nam się tutaj odpowiednio doda
i teraz te wpisy, które będziemy tutaj mieć. Zobacz, one
będą miały już id użytkownika 1.
Jak widzisz część wpisów, czy w zasadzie wszystkie wpisy nieopublikowane i
nie są Premium, to też możemy sobie teraz zmienić, żebyśmy za każdym
razem kiedy wykonamy taki migracje, nie musieli ustawiać
wpisu jako opublikowanych, więc przejdźmy sobie jeszcze tutaj do tego naszego PostFactory
i wiemy, że mamy coś takiego jak published i chcemy
to ustawić albo na 1 albo na 0, więc mogę w zasadzie rand od zera
do 1, czyli chcemy żeby to było raz 0, raz 1, randomowo i
podobnie mamy z Premium, okej,
więc tutaj jeszcze raz będziemy musieli wykonać sobie migrate:fresh
oraz db:seed. Zobaczmy jak to teraz się w tabeli
naszej ułoży. Jak widzisz część wpisów jest opublikowanych, część nie jest, część jest jako
Premium oznaczone, część nie, więc to dla naszych testowych celów jest
jak najbardziej w porządku okej i teraz gdy skojarzyliśmy
sobie już danej wpis z użytkownikiem poprzez user_id to
pokażę ci jak w laravelu możemy ustawić relacje tak aby móc z bez
problemu korzystać, więc wrócimy sobie do kodu i teraz
chcemy powiedzieć że post czyli wpis przynależy
do użytkownika, dlatego przejdźmy sobie do modelu post i dodamy
sobie tutaj funkcje będzie to public function
i tą funkcję możesz nazwać jak chcesz, ale ma to pewne konsekwencje. Jeżeli
nazwiemy ją user to tutaj odwołamy się do relacji, zrobimy
this belongsTo i tutaj musimy podać
pełną ścieżkę do klasy, czyli możemy tutaj odwołać się do User class. Teraz
jeżeli byśmy sobie przeszli do php artisan tinker i
pobierzemy sobie pierwszy wpis w ten sposób, first
to na zwraca pierwszy model i na nim możemy się odwołać do user
czyli do tego co tutaj zdefiniowałem, nie musimy tego wywoływać jako metody,
czyli tylko po prostu jako taką właściwość. Zauważ, że to od razu
zwracana model użytkownika a to oznacza że dalej możemy się odwołać na przykład
do name zobaczyć kto napisał taki wpis. Zadziałało to z automatu dlatego
że laravel wiedząc, widząc coś takiego jesteśmy post
więc on wie, że operujemy na tabeli posts. Widzi że metodę nazwaliśmy
user, więc próbuję w tabeli posts znaleźć
user podkreślnik id, coś takiego udaje mu się tutaj znaleźć i
wie, że to się ma odwoływać do klasy user, która
z kolei laravel wie, że odwołuje się do tabeli users, więc on
przechodzi do takiej tabeli users można powiedzieć i tam już szuka id, czyli
zadziałało to z automatu. Natomiast ja chcę zrobić rzecz troszeczkę inną. Chciałbym
sobie to nazwać author, bo będzie to nas bardziej czytelne, więc chciałbym mieć
post i na nim robić author i żeby to zwracało poprawnie. Natomiast to nam nie
zadziała z tego powodu że wtedy laravel będzie szukał tutaj w tej
tabeli post author_i d i dopiero później szukałbym
w tabeli users i to już by mogło działać poprawnie. Natomiast nie ma problemu,
możemy tutaj podać dodatkowe parametry i powiedzieć, że kolumna nazywa
się user_id w tabeli posts i ona się odwołuje do atrybutu id
czy do kolumny id już właśnie w user, która zostanie znaleziony
potem i teraz jeżeli przejdziemy jeszcze raz do artisan tinker i raz
jeszcze wywołam powyższy kod, ale tym razem będę chciał zwrócić author to
zauważ, że również wszystko działa poprawnie. Jeszcze jedna rzecz, którą chcemy
zrobić, czyli odwrotność i jeżeli post ma author'a,
to znaczy, że użytkownik ma wpisy, czyli post, dlatego to
co zrobimy to przejdziemy sobie teraz do klasy modelu user i dodamy
public function posts, w ten
sposób i tutaj zwrócimy return this i tym razem będzie hasMany. Tak
zdefiniujemy tę relacje hasMany, następnie Post class,
tutaj nie musimy podawać dodatkowych pól, bo laravel będzie wiedział jaki sposób
to znaleźć, czyli jeżeli ma tutaj post, wiesz że to się odwołuje
do tabeli post, wiesz że jest na modelu user
dlatego w tabeli posts będzie szukał user_id. To zadziała nam już
z automatu, jeżeli znowu byśmy przyszli do tinkera i tym razem znaleźli sobie
pierwszego użytkownika i następnie chcieli pobrać
jego wpisy. Jak widzisz kolekcja wszystkich wpisów zostanie nam zwrócona, normalna
kolekcja na której możemy robić foreach i dokładnie tak samo jak wcześniej pobieraliśmy sobie wpisy. Natomiast
jeszcze jedna ciekawostka, jeżeli się odwołamy do tego jako do metody. Podobnie zresztą w
poprzednim przykładzie do author, to zostanie nam zwrócony query i na
tym query możemy sobie robić na przykład where czy możemy podać tylko trzy wpisy mówiąc
limit i później get. Teraz będą tylko trzy zwrócone.
Dokładnie tak też stało, więc można tym operować jako na pewnej
właściwości obiektu lub jako metodzie. W taki oto
sposób możemy przepisywać relacje, oczywiście relacje są różnego typu jest one to many, one to one
i tak dalej. Natomiast w lekcji kolejnej skupimy się jeszcze nad tym żeby
przy dodawaniu wpisów z panelu administracyjnego również były
one odpowiednio przypisywane do użytkownika, a także wyświetlimy sobie kto napisał wpis w
widoku.