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
Aby dodawać komentarze do wpisu będziemy potrzebowali odpowiedniego formularza, który
wyświetlimy tutaj na tej stronie, więc gdzie go znajdziemy. Oczywiście
najpierw przejdźmy sobie do tego miejsca, czyli do post, jest
to tutaj i następnie do widoku, który przygotowałem
wcześniej, będzie to widok pojedynczego wpisu, czyli single,
jak się dobrze przyjrzymy to tutaj powinien się pojawić formularz
i jest to taka sekcja comments zaraz pod article ona się
znajdować będzie, dlatego jak to skopiujemy i tutaj sobie wrzucimy, w tym
miejscu, to będziemy mogli wyświetlać komentarze. Zanim
zajmiemy się obsługą tego formularza, który jest tutaj pod spodem, to zajmiemy się najpierw może
wyświetleniem komentarzy. Dzięki relacji, którą zdefiniowaliśmy, która
znajduje się w post, wiemy że możemy odwołać się do PostComments i
zostaną nam one zwrócone, więc będziemy chcieli to odpowiednio sobie teraz uzupełnić.
Przed tym if chciałbym sprawdzić czy jakiś
komentarze ogóle są, więc odwołamy się do post comments i następnie
count. Jeżeli to jest większa od zera to
tylko wtedy chcemy wyświetlać całą tą listę, proste
sprawdzenie. Następnie będę chciał tutaj wyświetlić odpowiednią
liczbę tych komentarzy i to możemy zrobić następujący sposób post
comments count. Jeżeli
jest większa od zera, to wyświetlimy tutaj comments w przeciwnym
samo Comment. Natomiast jeszcze wyświetlimy to
tutaj, czyli liczbę tych komentarzy, zaraz to się stanie jasne, a więc wyświetlimy na
przykład dwa i teraz jeżeli dwa jest większa zera to będzie dwa comments. Jeżeli
nie jest w zasadzie tutaj powinno być 1. Jeżeli to
będzie równe 1, to wyświetlimy Comment. Następnie będziemy chcieli
wyświetlić poszczególne komentarze, więc pętla foreach post
comments as comment. Teraz avatar zostawimy
sobie na razie, tym tym się zajmuje później, tylko zmienimy tutaj ścieżkę na
absolutną. Nazwę oczywiście możemy wyświetlić. Dlaczego?
Bo zdefiniowaliśmy odpowiednio wcześniej relacje i wiemy, że comment ma
author'a. Przypomnę ci tylko skąd to się wzięło. Tutaj sobie
to zdefiniowaliśmy, a w zasadzie widzę, że tym zapomnieliśmy, więc
zróbmy to teraz, author, tutaj
będzie belongsTo, User class i tak jak już robiliśmy wcześniej,
dlatego że to się nie nazywa user, tylko author, to musimy tutaj podać user_id
oraz id. Okej, czyli dzięki temu comment author
będzie działać i zrobimy sobie tutaj name. To nam się przyda jeszcze poniżej
i tutaj będziemy chcieli wyświetlić comment date
i odpowiednio sformatować, czyli format
i ten format, który przed momentem widzieliśmy, wyglądałby następująco, czyli
to jest d.m.Y, natomiast żeby
date było instancją klasy Carbon, to przypomnę ci jak robiliśmy w
przypadku wpisu czyli post. Musimy na samej górze zdefiniować
sobie protected dates i to jest date i dokładnie to musimy
zrobić w komentarzu, czyli w comment, bo inaczej będzie to po prostu string. Teraz
to będzie instancją klasy Carbon powinno tutaj zostać odpowiednio wyświetlone i ostatnia
rzecz, która jest tutaj potrzebna, to będzie comment
content. Jak widzisz nie pozwalamy tutaj na
wpisywanie jakiegoś HTML'a. Więc on automatycznie będzie escape'owany. Gdybyśmy zrobili
tak, wtedy byłby tutaj wyświetlany, ale że komentarze będą pisać
różni użytkownicy to nie chcemy żeby oni mogli tutaj wstrzyknąć jakiś kod
HTML, a przede wszystkim jakieś skrypty. Pod article musimy
zakończyć endforeach i w zasadzie
powinno nam się to odpowiednio wyświetlać. Zobaczmy czy nie ma żadnych błędów, oczywiście
jakiś błąd się pojawił, gdzieś tutaj. Tutaj
powinien być znak zapytania jeszcze, przy takim sprawdzaniu. Teraz jest w
porządku, mamy 5 komentarzy, jak widzisz fajkowo wygenerowanych do tego wpisu. Do
innych wpisów oczywiście może w ogóle nie być komentarzy, może być inna ich liczba. Na
samym dole jak możesz zobaczyć, pojawił się również taki
formularz, który chcemy teraz odpowiednio dostosować. Więc skoro
jest to formularz, będziemy go wysyłać za pomocą post. To
jest dokładnie to co robiliśmy wcześniej, na pewno on będzie potrzebował pola csrf,
tutaj name możemy w zasadzie zmienić na content, będzie
to Your comment, od razu możemy załatwić tutaj również walidacje, tak
jak robiliśmy wcześniej, czyli jeżeli errors has content to dodamy klasę
is-invalid, a tutaj możemy wpisać to co już ktoś wcześniej uzupełnij czyli
old content, okej. I teraz jedna ważna
rzecz, zaraz będziemy tworzyć kontroler, do którego wyślemy właśnie taki komentarz,
ale w tym kontrolerze musimy wiedzieć do którego wpisu ten komentarz
chcemy dodać i teraz wiemy jaki użytkownik dodaje komentarz, ale
do jakiego wpisu już niekoniecznie, dlatego tutaj utworzymy sobie
ukryte pole, w tym przypadku musimy to zrobić w ten sposób i jego
name ustawimy na post_id i value wstawimy
tutaj post-id, bo do post'a mamy dostęp, okej. Zatem
teraz utworzymy sobie kontroler, który to wszystko pozwoli nam to dodawać. Będzie
to proste php artisan make:controller
i nazwiemy go po prostu CommentController, według
naszej konwencji. Ten controller będzie
miał tylko jedno metodę i ta
metoda to będzie metoda store. Pamiętaj, że możesz ją nazwać dowolnie, będziesz
ją po prostu musiał zaraz podać w pliku web.php. Tutaj
przechwycimy sobie request, na
początek będziemy chcieli wykonać walidację, więc utworze zmienną data
i znowu tutaj nic czego byś widział do
tej pory, czyli request validate i będziemy chcieli podać tutaj odpowiednie
reguły, a więc przesyłamy post_id i to
jest ważne, będziemy chcieli zrobić tak, że to jest wymagane. Chociażby
to ustawimy jako ukryte pole, to zasadzie wydawałoby, że nikt tego nie zmieni, ale
zawsze musimy dbać o walidację. Ktoś może to podmienić, może wysłać w inny sposób
również to zapytanie, więc to pole musi być po pierwsze wymagane, musi być numeric,
czyli numeryczne i jeszcze jedna walidacja, która bardzo może
nam przydać to jest exists, to oznacza że wartość która tutaj zostanie
przesłana chcielibyśmy żeby się znalazła w tabeli posts pod id,
czyli jeżeli ktoś by tam coś podmienił, tam będzie 10, a w tabeli posts
nie ma id, czyli identyfikatora o wartości 10, wtedy
tutaj ta walidacja nie przejdzie. Zatem myślę to są
wystarczające sprawdzenia, chcemy dodać komentarz i upewniamy się że pust, do którego dodajemy
istnieje przy takim zwróceniu tutaj post_id będzie
okej ale gdyby ktoś to podmienił mogłoby być różnie. Natomiast druga rzecz którą będziemy
sprawdzać to jest content i tutaj reguły walidacji chcemy ustawić oczywiście
na require i kolejną regułą będzie na przykład że
minimum trzy znaki trzeba wpisać żeby ktoś nie wysyłał komentarza, gdzie przykład będą
dwie literki. Ale ta reguła oczywiście jest dyskusyjna, możesz ją ustawić
inny sposób. Jeżeli się uda zwalidować, to wiemy że wtedy tutaj
pod data będziemy już te odpowiednie dane i wystarczy, że
wtedy utworzymy sobie w bardzo prosty sposób komentarz. Musimy oczywiście wcześniej to
zaimportować za pomocą use App Comment i teraz
tutaj Comment create i do
danych, które tutaj są przesyłane musimy jeszcze dodać user_id, żeby to odpowiednio zapisać, więc
mogę napisać data user_id to tam podstawić albo możemy
skorzystać z Helpera jeżeli odpowiednio sobie za importujemy tutaj support Arr.
Czyli będzie to Arr add i chcemy do tej tablicy data
dodać user_id i chcemy to ustawić na wartość
request user_id. Jeśli
komentarz uda się utworzyć to chciałbym zwrócić czyli wrócić do poprzedniej
strony, a więc return back i w sesji wstrzykniemy sobie, a więc napiszemy sobie, a więc napiszemy
tutaj with message. Dzięki temu nasz komunikat się wyświetli Your comment
has benn added. Okej
teraz jeszcze jedna rzecz, którą trzeba zrobić żeby to wszystko mogło działać oczywiście
odpowiednio podstawić ścieżkę tutaj
więc definiujemy Route post
i powiedzmy będzie to comment create Comment
Controller i metoda store. Nazwijmy
tutaj tę ścieżkę żeby się do niej za moment w widoku odwołać comment.create
i ostatnia rzecz, którą trzeba zrobić to tutaj
musimy w tym formularzu zwrócić raute,
nazwa comment.create. Ok,
troszkę napisaliśmy, powinno to działać, więc jeżeli teraz
tutaj dodam jakiś komentarz, wpisze za mało znaków. Jak widzimy
walidacja działa to pole powinno zostać podświetlone. Natomiast jeżeli teraz
piszę My New Comment i spróbuje wysłać
pojawił się jakiś błąd, no właśnie post_id
nie zostało dodane do fillable i tutaj laravel obronił nas
przed tym gdyby ktoś wysłał zbyt wiele danych, dlatego musimy się przenieść
do Comment dodać tutaj protected,
fillable i mówimy,
które pola chcemy pozwalać przy Mass Assigment ustawiać. Będzie
to na pewno post_id, będzie to na pewno user_id
i będzie to na pewno content, czyli zasadzie wszystkie, które są nam potrzebne, czyli
teraz odświeżę i raz prześlę ten formularz, tutaj potwierdzę, żeby te same dane zostały
wysłane, to jak widzisz mamy komunikat, że komentarz się dodał rzeczywiście
ten komentarz tutaj jest i teraz gwarantuję ci, ale nie będę tego pokazywał,
że jeżeli zalogujesz się na innego użytkownika, dodasz komentarz, to on się tutaj pojawi
właśnie z nazwą tego użytkownika.
Walidacja w textarea · 5 min
<textarea name="content" class="form-textarea{{ $errors->has('content') ? ' is-invalid' : '' }}" placeholder="Your comment">{{ old('content') }}</textarea>Walidacja w textarea · 5 min
<textarea name="content" class="form-textarea{{ $errors->has('content') ? ' is-invalid' : '' }}" placeholder="Your comment">{{ old('content') }}</textarea>Walidacja w textarea · 5 min
<textarea name="content" class="form-textarea{{ $errors->has('content') ? ' is-invalid' : '' }}" placeholder="Your comment">{{ old('content') }}</textarea>