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
Mamy już pustą tabelę post. Teraz chciałbym do niej dodać jakieś dane,
ale zrobimy to za sekundę. Najpierw utworzymy sobie model i zobaczysz
ostatnią składową MVC, bo mamy już kontrolery, mamy widok który nam to
wszystko wyświetla. Teraz potrzebujemy jeszcze modelu który będzie nam pozwalał dodawać dane
do bazy danych, również je pobierać i w pewien sposób również formatować.
Okej więc przejdziemy sobie raz jeszcze do naszej wirtualnej maszyny,
tutaj do vagrant'a i wpiszemy PHP artisan make
model tym razem i model nazwiemy post, zawsze nazywamy go taką
liczbę pojedynczą i laravel automatycznie będzie wiedział że jeżeli
nazwaliśmy go post to ma się on odwoływać do tabeli w bazie danych o
nazwie w posts, czyli doda sobie s na końcu. To w razie czego można zmodyfikować, ale
jeżeli używamy tutaj angielskich nazw to naprawdę działa to świetnie i nie ma tym problemu,
więc stworzyliśmy sobie model post. Zobaczymy gdzie on się
pojawił, wiemy już że nasze migracje pojawiają się tutaj database migrations, w app http
controllers pojawił się nasz controller, a w samym app pojawił nam się
model post. Tutaj wcześniej był model użytkownika, do
którego będziemy przechodzić później, ale my utworzyliśmy pusty model post. Zauważ,
że znowu jest to klasa php, mamy name space, nasze główne app. Nie
mówiłem o tym wcześniej, ale jeżeli będziesz potrzebował z jakichś powodów tą nazwę można zmienić. Tutaj
mamy od razu jakby zaimportowany model który jest rozszerzany
przez post. Okej więc co tutaj
możemy zrobić, możemy zrobić wiele rzeczy, ale nie musimy robić kompletnie nic, czyli jeżeli
taki model utworzymy, to już możemy zacząć z niego korzystać. Czyli możemy tworzyć
nowe instancje po namespace app post i będzie
to wszystko już działać poprawnie pozwoli nam wydobywać dane z bazy danych i tam jest zapisywać,
dlatego właśnie że rozszerza to klasę model. Okej więc co my
będziemy chcieli teraz zrobić. Teraz będziemy chcieli dodać sobie jakieś dane do bazy danych
i na to są dwa sposoby. Pierwszy z nich to zrobimy to po prostu ręcznie
i przejdźmy na sekundę do controller'a. Robię to dlatego bo chciałbym żebyś zobaczył
krok po kroku, skopiujemy sobie tytuł który tutaj przechodząc do
naszej bazy danych w tabeli posts oczywiście będziemy chcieli dodać nową wartość. Jeżeli
chodzi o value, zostawimy default, czyli ma się ustawić automatycznie, tytuł
wpisaliśmy tutaj, content będę chciał ustawić na taki który mieliśmy tutaj
okej. Jeśli chodzi o blade tutaj użyjemy
expression i z wielkich liter wpiszemy funkcje na auto, MySQL sprawi automatycznie
dzisiejsza data zostanie tam dodana, type to będzie text czyli wpiszemy
to tutaj image będzie miał wartość null, czyli nie będziemy jej podawać i te
będą miały domyślną wartość. To są właśnie te z timestamps o których mówiłem,
laravel je dodał automatycznie, created at updated at. Widzimy
tutaj query jaki zostanie wykonany. Wstawiamy to do bazy danych i
taki post się tutaj pojawił i teraz mógłbyś zapytać. No właśnie ale jak go
wyciągnąć. No i dobra wiadomość jest taka że modele
które są tutaj tworzone, czyli nasz post korzystają z tak zwanego Eloquent i jest to ORM,
które nam opakowuje po prostu bazę danych, a więc nie musimy pisać własnych
zapytań SQL'owych, dlatego jeżeli teraz przejdziemy do terminala i tutaj wirtualnej
maszynie wpiszemy sobie php artisan tinker, to
jest narzędzie którego ci jeszcze nie pokazywałem, ono pozwala nam wykonywać dowolny
kod php, tutaj takiej interaktywnej konsoli i jakby we wnętrzu naszej
aplikacji. Czyli wszystko co naszej aplikacji Jest tutaj jest dostępne, dlatego
jeżeli chcielibyśmy sobie teraz pobrać wszystkie posty, to musimy po pełnym name się odwołać,
czyli app post, dokładnie do tej klasy. Zauważ, że nic tutaj nie zdefiniowaliśmy i
ona dzięki temu, że dziedziczy model to ma bardzo wiele różnych metod i ma
na przykład taką metodę jak all i zauważ, że ta metoda zwróciła
nam obiekt Collection. To jest istotne że jest to Collection dlatego że
kolekcja z kolei zawiera różne metody z którymi później będziemy pracować i mamy w
środku coś co wygląda jak tablica i są tam instancje tego modelu, czyli
mamy dane po pierwsze wyciągnięte z bazy danych, to jest jedno. Natomiast druga
sprawa jest taka że to co w tej tablicy się znajduje jest to instancja tej
klasy post, czyli wszelkie metody które tutaj byśmy dodali, później na takich
post'ach też będą dostępne i na przykład w widoku można z nich będzie skorzystać. Okej,
czyli to jest pierwszy sposób Jak dodać wpis do bazy danych. Dodaliśmy
go ręcznie a teraz pokażę ci jak dodać go z użyciem właśnie Eloquent'a
czyli zrobimy to tym naszym php artisan tinker który tutaj wpisaliśmy. Będę
chciał napisać post, to jest app post
make i teraz są dwie możliwości albo robimy make. Chociaż
w zasadzie nawet nie make, tylko zrobimy new czyli nową instancję i albo
tutaj przekażemy wszystkie rzeczy które są nam potrzebne i zostanie taki
post utworzony. Możemy to sprawdzić. Wpiszmy tutaj sobie tutaj okej
coś takiego. Zauważ że podaję sobie tutaj po prostu taką tablicę asocjacyjną czyli tytuł
data, tutaj korzystam z funkcji now i to nie jest to samo co przed momentem wpisywaliśmy
w Chrome MySQL Admin, bo tam korzystaliśmy z wyrażenia MySQL,
a tutaj korzystamy funkcji którą laravel dla nas zwraca.
Jest taka funkcja jak now i ona nam zwraca datę jako instancje carbon
o czym powiem jeszcze później. Niemniej jest to funkcja po prostu dostępna tutaj w php,
type ustawiłem photo i image ustawiłem w ten sposób i zobaczmy co się stanie kiedy będziemy
chcieli utworzyć taki post. No właśnie pojawiło nam się coś takiego jak mass assignment
exception i to oznacza że nie możemy przy tworzeniu nowego
modelu podać sobie od razu wszystkich rzeczy i to wynika z tego że często
później co będziemy robić, jeżeli wysyłamy dane formularza do serwera to
przechwytujemy te dane i tworzymy na ich podstawie nowy post. Czy w ogóle jakiś nowy model
i żeby te dane nie były w jakiś sposób złośliwe to laravel
tutaj się broni, że nie można przekazać tablicy gdzie jest wiele rzeczy, chyba że przejdziemy
do naszego posta i zrobimy tutaj coś takiego jak public. W
zasadzie to chyba może być nawet protected i albo to będzie fillable,
czyli te które można uzupełnić. To
jest tablica w której możemy podać że kiedy ktoś podaje jako tablice wszystkie
te rzeczy przy tworzeniu nowego modelu to mogą tam być podane
te rzeczy które tutaj wymienię. Natomiast my na chwilę obecną tylko na
chwilę zrobimy to jako guarded, bo guarded to jest odwrotność, to
oznacza że te które tutaj podamy nie mogą się znaleźć w tablicy która jest przekazywana przy tworzeniu
nowej instancji, więc jeżeli guarded ustawimy na pusty, pustą tablice,
to nam to przejdzie, tylko jedna ważna uwaga, php artisan tinker, który
uruchomiliśmy, on nie wyłapie zmian które teraz tutaj się zadziały w naszej aplikacji,
bo on już w instancji aplikacji ma wczytaną w pamięci. Dlatego muszę niego wyjść
za pomocą Exit i i wejść do niego jeszcze raz. Teraz strzałką w górę będę
mógł przejść do poprzedniego polecenia i jak widzisz udało nam się tym
razem utworzyć już nowy post. Ma on tytuł, ma datę, ma type, ma image.
Natomiast on nigdzie jeszcze nie jest zapisany i możemy sprawdzić odświeżając tutaj
że nie pojawił w bazie danych. Teraz na takim obiekcie post
możemy wykonać na przykład save go zapisać. Zobaczmy, mamy wartość true zwróconą,
to oznacza że udało się zapisać nasz wpis w bazie danych i wygląda
to w następujący sposób. Natomiast zamiast tworzyć new i tutaj
nasz model moglibyśmy od razu skorzystać z app post, dwukropek,
dwukropek create i podać to samo co jest tutaj. Create oznacza że od razu chcemy
utworzyć instancję i zapisać ją w bazie danych, więc to jest
taki sposób który pozwala nam tworzyć nowe modele. Później będziemy z niego korzystać
w naszym kodzie. Natomiast teraz jeszcze będziemy chcieli wyświetlić wszystkie te
modele które tutaj się znalazły gdy będziemy chcieli je pobrać i wyświetlić
po prostu widoku sobie mnie tabletki kolejnej.