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
Pracując nadal nad autoryzacją chciałbym zrobić jeszcze rzeczy następującą.
Otóż ukrywać wpisy czyli jeżeli wpis nie będzie miał statusu published
to chciałbym żeby on był ukryty, ale widoczne tylko dla admina, a z drugiej
strony nie żeby niektóre wpisy były oznaczone jako Premium i one będą dostępne wyłącznie
dla użytkowników zalogowanych i w tym celu musimy zrobić kilka rzeczy. Zacznijmy
od tego że musimy w migracjach zmienić strukturę bazy danych, żeby do wpisu
dodać coś takiego jak published i premium a przy okazji jeszcze wyeliminujemy
jeden błąd który potencjalnie mógł pojawić że nasz tytuł nie jest
wymagany jako unikalny. Dlaczego musi być unikalny tytuł dlatego
że na jego podstawie generujemy slug i teraz jeżeli slug będzie
taki sam dla dwóch różnych wpisów, to nawet jeżeli przejdziemy pod ten drugi wpis to wczyta
się pierwszy, bo w bazie danych zostanie znaleziony po prostu pierwszy, bo korzystaliśmy z findOrFail.
Okej, więc co będziemy chcieli zrobić. Na pewno wygenerować sobie migracje,
bo jeżeli przejdziemy do database migrations,to tutaj gdzie tworzyliśmy posts_table, oczywiście
przypominam raz jeszcze możesz to dodać tutaj i zrobić migrate fresh i na czas development'u
jest okej. Ale ja ci pokazuje jak będzie jeżeli będziesz pracował nad aplikacją która
już jest uruchomiona i musisz dodawać do niej nowe pola nie kasując istniejących
danych, skąd ja już w ten sposób od razu pracuje i pokażę ci jak nową migracje
zrobić, dodając coś tutaj lub zmieniając. Po pierwsze chcę zmienić string na
unique żeby on był unikalny i to będzie można zrobić. Zrobimy
wszystkie te trzy rzeczy w jednej migracji, czyli wpiszemy sobie php artisan make
migration, tutaj te nazwy są dowolne, ale ja ją nazwę tak żebym wiedział
co chodzi, czyli to będzie add_unique_premium_published_to_posts_table,
natomiast ważne żeby podać tutaj o którą tabelę chodzi, posts, taka
migracja nam się wygeneruje, ona jest tutaj i będziemy mogli się odwołać table
i następnie do string title, my to już tam mieliśmy.
Chciałbym zaznaczyć, że on ma być unikalny, unique, to zmieni
w strukturze SQL'owej tabeli, to jest bardzo ważne że tam zostanie dodany
taki specjalny index, więc zrobimy unique i tu musimy wykonać
change. To jest pierwsza rzecz. Druga rzecz to chciałbym dodać table
i następnie będzie to boolean, czyli
wartość true lub false, 1 lub 0 published. Ustawimy
wartość domyślną, jeżeli się tego nie poda, to domyślnie dodawany nowy wpis będzie nieopublikowany i
chciałbym tu dodać after, czyli za content, w naszej
tabeli po prostu będzie to w miarę fajnie wyglądać i druga rzecz którą chciałem zadać to
jest premium i chciałbym dodać również za content. Teraz
takie migracje jak sobie wykonamy, to powinny się te rzeczy do tabeli post dodać
więc php artisan migrate i od razu ci powiem że będzie pewien
błąd ale on nam jest potrzebny. Tutaj coś źle wpisałem. Potrzebny
w tym sensie, że chciałbym żebyś go zobaczył i żebyśmy mogli go wspólnie rozwiązać. Żeby
wykonywać change, a więc nie dodawać nowych rzeczy, ale zmieniać coś na istniejących, potrzebna
jest paczka która nazywa doctrine/dbal, dlatego pokażę ci
jak ją zainstalować. Wpisujemy composer require i podajemy doctrine/dbl
i teraz wystarczy że poczekamy aż composer wszystko zainstaluje i raz jeszcze będziemy
mogli wykonać migrate, okej. Composer zrobił
swoją robotę, więc możemy spróbować raz jeszcze php artisan migrate. Udało
się i teraz jeżeli przyjdziemy sobie do bazy danych i do tabeli posts, zauważ że
mamy tutaj od coś takiego jak published i premium i to
zostało dodane dokładnie tam gdzie chcieliśmy więc jest wszystko okej. Teraz kolejna
rzecz, którą będziemy chcieli zrobić, to przejdź widoku, który mamy create
oraz edit za moment. Zauważ że tutaj mamy checkbox published value
1 i tutaj również mamy premium. Więc będę chciał żeby one
zaznaczone jeżeli na modelu to jest zaznaczone. Zrobimy to od razu
tutaj, czyli jeżeli post, chociaż tutaj w create, a w create
tego nie będziemy robić tylko w edit to zrobimy. Tutaj
jeżeli posts published to
wtedy chcemy zrobić coś takiego jak checked, tutaj dodać, w przeciwnym wypadku
pusty ciąg i to samo zróbmy
dla premium, to będzie potrzebne później. Okej, to
jest w tym miejscu teraz kolejna rzecz musimy zrobić to przejść do post i pamiętasz
mieliśmy tutaj coś takiego jak fillable, więc to są rzeczy które można uzupełniać i
chciałbym żeby published też przy tym Mass Assigment tutaj nie było ignorowane
oraz premium. To są te rzeczy. No i teraz jeszcze jest jedna rzecz,
ale to już ci pokażę na żywo. Więc przychodzimy sobie edycji i
ten checkbox nie jest zaznaczony, zaznaczam go robię update i
on powinien być teraz zaznaczony, ale z jakiegoś powodu nie jest. Zobaczmy
co się wydarzyło. Odświeżam
tutaj, okej published się nie zapisało. Już wiem dlaczego musiałem przejść
do kontrolera i tutaj
musimy to dodać do walidacji, wszystkie rzeczy tutaj nie są w walidacji to momencie kiedy
robimy validator, tutaj validate i data. Zauważ, że to data przekazujemy
do otworzenia czy aktualizowania post'u, to jeżeli nie ma ich w walidacji nie
ma ich również wynikowym data. Dlatego tutaj musimy sobie dodać coś
takiego jak published i powiemy, że chcemy to walidować i jako boolean,
okej. W ten sposób żeby to było i następnie
premium, również boolean. Taka walidacja nam
powinna wystarczyć, jeżeli teraz tutaj odświeże i zaznaczę, że on jest opublikowany, to
rzeczywiście tak też się stało. Okej,
tylko jeszcze prawdopodobnie tutaj popełniłem błąd że gdzieś dwa razy mamy published,
a tutaj powinno być premium. To z tego wynika. Teraz jest
okej, tylko mam jeden problem, jeżeli odznaczę taki checkbox i zrobię update, to on cały
czas jest zaznaczone i to wynika nie laravela, ale z tego co robi przeglądarka. Jeżeli checkbox nie
jest zaznaczony, ona go nie przysyła zupełnie do serwera, dlatego musimy
tutaj niestety poczarować sobie na serwerze jeżeli te wartości
puste to musimy je w jakiś sposób tutaj zapisać.
Ja proponuję zrobić to następujący sposób, że tutaj napiszemy
sobie validated to będą te reguły walidacji i po
prostu to będzie tablica do której dodamy sobie coś za pomocą arr, to
musi być zaimportowane tutaj, przypominam Arr add, to
jest Helper laravel'owy, validated chcę
tam dodać published, ale on doda tylko wyłącznie jeżeli tego tam nie ma, więc możemy bezpiecznie
zrobić to w ten sposób i tą tablicę trzeba nadpisać i druga rzecz
to jest imionpremium, OK,
a zasadzie chodzi o to żeby było zero a nie 1, czyli jeżeli nie zostało przesłane ustaw na
0 i tutaj będziemy zwracać validated. Ale
jak wiadomo teraz już to nie będzie działać, więc tutaj musimy od zrobić
validate, a na dole, tutaj gdzie wykonywaliśmy metodę validate
już prostu będziemy to zapisywać w ten sposób i
tutaj również nie powinno się nic zmienić. Oprócz tego,
że te będą dawane i one jak będą w tym validated zwrócone to wtedy powinny
być odpowiednio ustawione, więc sprawdźmy, odznaczam, aktualizuje i rzeczywiście
to jest odznaczone. Teraz jeśli odświeżymy, to ten wpis ma 0. Zaznaczmy
sobie premium w ten sposób odświeżmy i widzimy premium
jest teraz na jeden. Podobnie będzie z published, więc to teraz już powinno działać w sposób poprawny
i tak dokładnie się dzieje i to nam na razie wystarczy, a
będziemy w kolejnych lekcjach chcieli zrobić tak jak wspominałem, żeby opublikowane
były widoczne dla wszystkich nieopublikowane tylko dla qdmina i premium
dla tych którzy są zalogowani.