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
Skoro możemy oznaczać post jako nieopublikowany to teraz wypadałoby zrobić
tak, żeby faktycznie on się na stronie nie pojawiał i zrobimy to z użyciem
tak zwanego queryscope, dlatego przejdźmy sobie do post pokażę
ci że jest to dosyć proste, napiszemy public
function i teraz te wszystkie funkcje które mają być takim scopem które
modyfikują jakoś query zaczynają się od słowa scope, a potem już twoja nazwa, z której
będziemy za moment korzystać, więc ja ją nazwę published. Tutaj otrzymamy obiekt
query, który możemy zmodyfikować i teraz będziemy chcieli zwrócić
to query, powiedzieć where published równa
się 1 i to query jest zwracane i dalej na nim można pracować, ale
automatycznie nic tutaj się nie wydarzy, dopóki z tego nie skorzystamy. Dlatego teraz tam gdzie
mieliśmy PostController i mówimy o tym kontrolerze, zanim
wykorzystamy latest, to żeby tutaj po prostu nie pisać where
published równa się 1, oczywiście można to zrobić, to stworzyliśmy queryscope,
który może być nawet bardziej zaawansowany i za moment będzie i możemy na nim powiedzieć
od razu published i tutaj skorzystać dalej. Skorzystaliśmy z niego
jak ze statycznej metody, bo laravel nam na to pozwala, aczkolwiek moglibyśmy dopiero tutaj
skorzystać z published i też będzie w porządku, ale ja to zazwyczaj
robię na początku, czyli mówimy published, a dopiero potem
latest i paginate. Co to oznacza? Jeżeli przejdziemy na stronę
główną, mamy tylko jeden wpis, bo tylko jeden jest opublikowany i to widzimy
tutaj. Jeżeli bym to zmodyfikował i ustawił tutaj published na
0 i zaktualizujemy to nam niestety nie pojawią żadne
wpisy, więc jest okej, natomiast chciałbym to zmodyfikować tak żeby to dotyczyło
admina. Pokażę ci teraz jak możemy to zrobić, na pewno jest to wiele sposobów, ja
ci pokażę taki które uważam skuteczny. W miejscu mamy
gdzie mamy scopePublished spróbujemy znaleźć użytkownika i w
dowolnym miejscu twojej aplikacji możesz się odwołać do funkcji auth
i ona zwróci ci właśnie taki obiekt, w którym można jakby wyszukać
użytkownika, dlatego zrobimy user funkcja globalna auth wygląda tak i następnie
na niej możemy się odwołać do user. Jeżeli użytkownik jest zalogowany to zostanie tutaj
zwrócony jako model gdzie mamy name email i tak dalej, jeżeli nie to
będzie tutaj null, dlatego będziemy chcieli zrobić rzecz następującą. Jeżeli
użytkownik jest i jeżeli on jest adminem, to tylko wtedy będziemy chcieli
wyświetlać wszystkie wpisy, czyli zrobimy tak jeżeli użytkownik
nie dowolny, ale admin, więc musimy dodatkowo sprawdzić user
i tutaj wykonamy can, nie będziemy pytać czy jest adminem, ale czy może zarządzać
postami. To co zrobiliśmy wcześniej, więc jeżeli użytkownik może zarządzać
postami, to zwracamy query, czyli nic nie modyfikujemy, to znaczy że wszystkie
wpisy będą zwrócone. Natomiast w przeciwnym wypadku zwracamy tylko
takie które mają published 1, okej. Tutaj coś
najwyraźniej poszło nie tak. Teraz jest w porządku, przetestujmy,
nie mamy żadnych wpisów, ale wiem że jestem zalogowany i nagle się okazuje że mogę
każdy wpis zobaczyć. Ale jeżeli się wyloguję, nadal nie ma żadnych wpisów, bo
tylko te które są opublikowane będą tutaj wyświetlane i teraz
jeszcze jedna rzecz, dlatego że jeżeli uznamy że któryś wpis jest opublikowany,
możemy to zmodyfikować nawet tutaj. Ustawiłem published na
1. On się na stronie oczywiście pojawi, przejdźmy
do niego i teraz jeżeli byśmy mu zmienili published na 0 to
zobaczysz jedną ciekawa rzecz. Otóż ten wpis dalej
jest widoczny, on po prostu będzie widoczny na stronie głównej, ale przejść do niego można, dlatego musimy
wprowadzić stosowne zmiany również tutaj gdzie wyświetlaliśmy
pojedynczy wpis. Teraz już nie będziemy mogli sobie tak bindować, jak to robiliśmy
wcześniej, tylko będziemy musieli tutaj otrzymać po prostu slug dlatego w web
musimy to zmodyfikować, gdzie mieliśmy pojedynczy wpis. Nazwę to slug,
okej i tutaj będziemy sobie chcieli takiego wpisu wyszukać,
więc zrobimy post równa się post published,
czyli korzystamy z tego naszego queryscope i on oczywiście sprawdzi
czy dotyczy to admina czy nie dotyczy, więc tutaj będzie wszystko okej,
ale dopiero na tych są published chcemy wykonać coś
takiego jak where i tutaj można podać slug i jako drugi parametr podać
jego wartość lub takiej magicznej metody skorzystać whereSlug i podać
przekazany nam tutaj z kontrolera, czy do kontrolera slug
i następnie firstOrFail. To będzie działać dokładnie tak samo.
Zobacz, teraz jeżeli odświeżę, to ten wpis jak widzisz zwraca nam
404, ale zapewniam cię jeżeli się zalogujemy to on dla admina
będzie jak najbardziej widoczny.