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
Rozpoczynamy zatem prace nad aktualizowaniem wpisów. Na razie to
nie działa, ale zaraz zacznie. Potrzebujemy przejść do PostController
i tutaj jest metoda, która powinna być wykorzystana, jeżeli w tym standardzie resourcefull
będziemy pracować do aktualizacji zasobu, czyli jest to update i
tutaj otrzymamy jego id, więc nie pozostało nic innego
jak dodać to w odpowiednim miejscu i teraz co jest ważne. Często
może się spotkać tym, że formularz jest wysyłany post'em tak jak to
robiliśmy wcześniej. To jest metoda, którą przeglądarka wspiera, ona może wysłać formularz get'em
lub postem, nie ma innej możliwości. Natomiast za pomocą Ajaxa, czyli użyciem JavaScript'u
możesz wysyłać dane w różny sposób, może być to get, post, put,
delete i tak dalej. Dlatego ja chciałbym to nasze app, jeżeli
tak możemy powiedzieć, tworzyć w taki sposób, żeby bardzo łatwo można je było zamienić na API takie,
korzystające z Ajaxa. Dlatego nie chcę tutaj mieć post'a i jakiegoś
adresu na zasadzie post id delete. Czy
w zasadzie tutaj zanim będziemy mieli delete to mamy update, tylko chciałbym
żeby ten adres był cały taki sam jak tutaj, czyli tak jak w API
typu rest, dlatego wykorzystamy tutaj inną metodę, a zatem jeżeli
wyślemy zapytanie http o typie put pod taki adres, przekażemy
dane, to wtedy chcemy aktualizować te dane czyli wykonamy metodę
update, to jest ta metoda, którą ci tutaj pokazałem, ona się wykona, ta
nazwa tutaj nie musi być drugi raz dublowana i teraz jak można formularz
wysłać, putem, a nie post'em. Pokażę ci za sekundę, czyli
to jest nam potrzebne, nazwa jest taka sama jak tutaj, czyli admin
post edit, a zatem przejdziemy do naszego formularza i będziemy
musieli podlinkować sobie tutaj akcję, czyli route
admin post ddit i pamiętaj,
że tutaj musimy przekazać id takiego wpisu, czyli jest id, my
wiemy, że w templatce edit mamy dostęp do post, dlatego przekażemy tam post id. Jest w
porządku, natomiast wysyłamy to post'em. Teraz jak można to wysłać put'em, laravel
nam na to pozwala, czyli i tak przeglądarka wyślę to post'em, ale laravel
za pomocą czegoś to zrobimy za moment będzie stanie stwierdzić, że chodzi o puc
i wykona odpowiednią akcje tego kontrolera. Wystarczy, że
tutaj wpiszemy coś takiego jak method field
i podamy put. Zobaczmy co się wydarzy bo
najlepiej jest oczywiście podejrzeć w kodzie. Laravel dodał tutaj
pole, bardzo proste, które nazywa podkreślnik method i jest to value put. Dzięki
temu ten formularz chociaż wyślę się tak naprawdę post'em to zostanie zarejestrowany
jako put i odpowiedni Controller się wykona. Natomiast jeżeli
z poziomu Ajax'u byśmy wysłali pod ten adres zapytanie i wtedy
już ustawimy normalnie put nie będzie żadnych takich ukrytych pól. Zwykłe
zapytanie Ajax'owe, to też wykona się ten sam Controller, więc to jest o tyle
dobra praktyka i teraz to wszystko tutaj powinno
działać. Powinno nam się wysyłać właśnie w to miejsce, więc jak będziemy
mogli ten post zaktualizować. Po pierwsze musimy znaleźć wpis, który chcemy
zaktualizować, dlatego skorzystamy z Post findOrFail i podamy
id. Jeśli go nie ma i zwracamy 404, że taki zasób nie istnieje. Natomiast
jeżeli on istnieje to kolejna linijka już się wykona i tutaj powinniśmy wykonać
walidacje, taką jak zrobiliśmy wcześniej, ale żeby tego wszystkiego nie kopiować, pokażę
ci jaki sposób możemy to wyekstrahować do osobnej metody bo jest
to dosyć proste. Gdzieś na samej górze utworzymy sobie metodę, która może być niepubliczna,
czyli protected function i naziwmy ją
validator. On tutaj będzie przyjmował jakieś dane i chcemy
zwrócić coś takiego return Validator, to musimy oczywiście zaimportować,
jak ja sobie teraz wcisnę Enter wybierając tutaj
ten drugi, tą drugą ścieżkę, to walidator u góry nam się dodał
jako taka fasada w laravel, to jest ważne żebyśmy tutaj mieli. W razie czego
możesz podejrzeć RegisterController, bo
tam coś takiego było, czyli tutaj mogłeś zobaczyć validator i
skąd on się wziął można zobaczyć w tym miejscu, ale ważne żeby to zaimportować
i możemy Validator make i przekazać tutaj wszystkie
reguły walidacji, więc skopiujemy je sobie stąd, w zasadzie
to jest wytnę. Wklejam je tutaj i to wszystko co zwracamy
właśnie z tej metody. Czyli mamy
je w tym miejscu, ale jeszcze musimy powiedzieć co chcemy dokładnie walidować, więc
przekażemy tutaj data. Możemy teraz wrócić tutaj na
dół gdzie to wszystko się odbywało i skorzystać z tej naszej metody, czyli
mamy metodę którą nazwaliśmy sobie validator, a zatem teraz będziemy
mogli powiedzieć this validator, przekazać dane,
one były w request all i następnie to, co zostało zwrócone,
taka instancja walidatora, ma metodę validate. Tyle wystarczy zrobić i to jest
dokładnie to samo, jeżeli się nie uda zostaniemy przekierowani z powrotem ze zmienną
errors tak dalej I kolejna linijka się nie wykona, więc tyle wystarczy
zrobić, ale dzięki temu, że zastosowaliśmy coś takiego, to
teraz możemy przejść do update i skorzystać również z tej metody, a nie
powielać całej tej walidacji. Jeżeli uda się nam z zwalidować
dane to wystarczy zaktualizować taki wpis i robimy to za pomocą post update
i przekazujemy tutaj tablice z wszystkimi rzeczami które Chcemy zaktualizować. Tutaj
również ma zastosowanie Mass Assigment, czyli to co mamy post ustawione, to
te rzeczy są dozwolone i te rzeczy mogą tutaj być przekazane. Jeżeli wpis
nam się zaktualizuje to wystarczy przekierować z odpowiednim komunikatem, w
zasadzie tutaj oczywiście musimy przekazać data. Przekierujemy
zatem z powrotem na tą stronę, chociaż w sumie możemy się przekierować również
na stronę gdzie ten wpis się znajduje. Ja Jednak sądzę, że po aktualizacji lepiej
jest przekierować na stronę na się było, więc zróbmy return, mamy taką
funkcję pomocniczą back, która nam to pozwoli zrobić i o ile tutaj wyżej
możemy zrobić sobie session_flash, to co robiliśmy wcześniej. Możemy również zrobić
to tutaj i będzie łatwiej, czyli return back with, w naszym
przypadku pamiętasz być może było to message i napiszemy Post has
been updated, okej. Spróbujmy
zatem sobie zaktualizować taki wpis. Odświeżam. Mamy tutaj jakieś
dane, dopiszmy na przykład wykrzyknik na końcu i tutaj
było Add post. Jak widzisz, udało się jeszcze to Add post zamienimy sobie
na Save albo Update, ale
widzimy, że to się udało, ten wykrzyknik tutaj został dodany. Jeżeli wrócimy na stronę tutaj
jak tak samo się dodało. Przejdziemy jeszcze raz to edit, widzimy
że te rzeczy się zapisały. Jeżeli natomiast nic nie podamy
to powinien validator zadziałać, jak widzisz tak też się stało, został tutaj tytuł
powrotem uzupełniony na taki jak jest bazie danych. Jeszcze jedną rzecz ci pokażę
w tej lekcji. Pokazałem ci w jaki sposób jeżeli nie jest
podana data w jaki sposób ją zaktualizować. No właśnie i tutaj już nie wzięliśmy
tego pod uwagę. Jeżeli byśmy wyczyścili pole data i próbowali
zaktualizować, to by się okazało że będzie błąd, bo nie wziąłem tego
pod uwagę tak jak tutaj w store, dlatego jest lepszy sposób jak to zrobić. Jeżeli
nie jest podana data, to przy tworzeniu albo aktualizacji chcielibyśmy ją ustawić. Ty
już ten sposób znasz, ale być jeszcze nie jesteś świadom w jaki sposób
to zrobimy. Przejdźmy sobie do post i tutaj mieliśmy coś takiego
jak setTitleAttribute, skopiujemy sobie to i ustawimy setDateAttribute i
zrobimy rzecz następującą. Chcemy
ustawić datę i jeżeli ona ma wartość null, czyli
is_null, a więc ktoś jej nie podał, to wtedy
chcemy tam przepisać aktualną datę, czyli zwróci nam to funkcja now. To
jest tak samo jak użycie Carbon now. W przeciwnym wypadku, jeżeli zostało
podane to chcemy to tam się pisać i to jest dużo lepszy sposób, bo
nieważne w którym miejscu będziemy tworzyć i w jaki sposób nasz wpis. Jeżeli
nie poddamy daty będzie ustawiona aktualna. Natomiast to co robiliśmy tutaj zakładało,
że wpisy będą tworzone wyłącznie za pomocą tego kontrolera. Przecież możemy je tworzyć
na wiele sposobów, choćby na przykład eksperymentując w artisan tinker. Tak
więc to jest ważne, że teraz zawsze data będzie dodawana i w zasadzie to jest tyle, jeżeli chodzi
o edycję wpisu. W kolejnej lekcji pokażę ci w jaki sposób możemy je usuwać.