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
Chociaż laravel jest frameworkiem skupiającym się na backend'zie to
oczywiście większość backend'ów musi mieć jakiś frontend i teraz w zależności
tego na ile jesteś zaznajomiony z nowoczesnym workflow we
frontend'zie, na ile pracujesz z narzędziami typu webpack czy gulp na
tyle będziesz w stanie lepiej zautomatyzować tworzenie frontend'u,
być może w ogóle nie zajmujesz tworzeniem frontend'u i nie będzie to twój problem, ale chciałbym
ci jednak pokazać w jaki sposób można pracować z frontend'em z użyciem laravel.
Po pierwsze co jest super istotne, to wiemy że nasze zasoby frontend'owe
czyli CSS, obrazki czy JavaScript są serwowane z katalogu public,
oznacza to tylko tyle, że ty możesz bezpośrednio w tym katalogu tworzyć na przykład CSS
i jest okej natomiast jeżeli będziesz go tworzył użyciem Sass i schowasz
sobie to w resouces, po to żeby ten Sass nie był dostępny publicznie w katalogu public to
musisz mieć jakiś sposób jak ten Sass skompilować i wstawić tutaj do public
bo dopiero stąd jest linkowany na naszej stronie. Możesz ten workflow dowolnie
sobie skonfigurować. Jeżeli kiedykolwiek korzystałeś z gulp'a, możesz gulp'a sobie
ustawić tak żeby brał na przykład ten plik main.scss, kompilował
go, używał na przykład autoprefixer'a żeby dodawać tak
zwane vendor prefixes do CSS i wstawiać to w to miejsce, czyli
jest tutaj zupełna dowolność, ale co ciekawe laravel oferuje nam coś
takiego jak mix i mix jest to pewna warstwa abstrakcji nad
webpack'iem i dlatego tutaj znajduje się taki plik jak webpack
ix js który pozwala nam definiować co się ma
tak naprawdę dziać jeżeli chodzi o te zasoby frontend'owe. Możesz
zauważyć, że tutaj mamy bardzo prosty taki ekspresyjny zapis, czyli
mówimy mix js, a więc weź plik z resources js app
i wstaw go do public js weź plik sass
z takiej ścieżki i wstaw to do public css. Taki
jeden zapis tutaj wystarczy, aby plik JavaScript'owy był odpowiednio kompilowany i
co ważne tutaj będzie zachodzić również kompilacja ze standardu ECMAScript6, z ECMAScritpt5
z użyciem odpowiednich bibliotek babel cli, rzeczy które
można zrobić w webpack'u i znowu zależy na ile się na tym znasz. Jeżeli
się tym znasz to na pewno wiesz o czym mówię, okej, czyli tak samo możemy
pracować z Sass, automatycznie autoprefixer jest tutaj dodawany i wiele
innych rzeczy. Jak widzisz również jest ten plik package json, a to oznacza
że możemy wpisać npm install i zainstalować wszystkie zależności które tutaj
się znajdują a następnie skorzystać z jednego ze skryptów wpisując na przykład npm run watch. Uruchomi
się taki deweloperski można powiedzieć serwer i będzie nasłuchiwał na zmiany w
plikach więc za każdym razem kiedy w plikach źródłowych, czyli na przykład w sass
albo w javascripcie coś zmienimy będą one kompilowane tutaj do tego
katalogu public czy w zasadzie dokładnie w miejsce które wskażemy w tym
pliku. Zanim jednak cokolwiek zrobimy ja chciałbym tutaj wkleić moją
konfigurację i szybko ją wytłumaczę, disable notifications to
jest tylko po to żeby nam nie wyświetlało różnych powiadomień które
mogą czasami irytujące. Następna rzecz którą chcę tutaj skonfigurować i to
ważne że te rzeczy możesz znaleźć dokumentacji mix na stronie laravel
jest browserSync i to jest kolei narzędzie które pozwala nam automatycznie przeładować
stronę kiedy coś zmieni w naszych zasobach albo na przykład tę samą stronę otworzyć
na wielu różnych przeglądarkach kiedy powiedzmy na jednej stronie scrollujemy, scrolluje
się na wszystkich. Naprawdę bardzo wygodne rozwiązanie, być może znane ci z
innych narzędzi albo po prostu bezpośrednio z niego korzystałeś, warto
wiedzieć że tutaj można z niego korzystać i teraz browserSync będzie uruchamiane
na osobnym porcie, więc ja zdefiniował em 3002, podaje tutaj domenę
która ma być jakby przekierowywana, czyli gdzie ma być proxy
robione, open false i notify false, open po to żeby nie otwierać domyślnej
przeglądarki kiedy się to wszystko uruchomi a notify po to aby na stronie nie pokazywać
powiadomień że na przykład jakiś plik się zmienił. Teraz możemy tutaj zrobić
taką rzecz nie jak mix.inProduction. Jeżeli nie jesteśmy
w produkcji mix będzie wiedział kiedy będziemy wykonywać skrypty produkcyjne, bo będzie
to na przykład script run prod. Natomiast
jeżeli wykonujemy development czy watch to wtedy nie jesteśmy w produkcji,
to wtedy ja chcę dodawać są source mapy i source mapy pozwolą nam podejrzeć
w narzędziach deweloperskich, gdzie coś w danym pliku się działo, czyli nie
będziemy widzieć pliku main.css ale na przykład plik message
scss i kolejna rzecz to jest właśnie wskazanie
już naszym przypadku na konkretny plik sass'owy czyli main scss, proszę
śledź zmiany w tym pliku i wyrzucaj to do katalogu
public css, version oznacza, że również chcemy tutaj tworzyć
source mapę, okej i jeżeli coś takiego sobie już
tutaj ustawimy to teraz musimy zainstalować wszystkie zależności. Jedna
ważna uwaga, my sobie zainstalowaliśmy laravel homestead po
to, żeby to była maszyna, która ma preinstalowane php mysql,
wiele innych rzeczy, ale tam również jest zainstalowany note, dlatego to co teraz
zrobię możemy uruchomić wewnątrz naszej maszyny wirtualnej, ale
z tego tytułu będą pewne konsekwencje i może
ja od razu powiem o co chodzi. Jeżeli masz Maca albo pracujesz na Linuxie, nie
ma żadnego problemu. Jeżeli pracujesz na Windowsie to niestety będziemy mieli taki
problem że jeżeli uruchomimy sobie na przykład to browserSync wewnątrz
tej maszyny wirtualnej to kiedy my będziemy z naszego systemu, czyli
z Windowsa bo mówimy tutaj o Windowsie. Kiedy w Windowsie ty
coś będziesz zmieniał w tych plikach to ta maszyna wirtualna nie będzie stanie wyłapać tych
zmian i na przykład odświeżyć ci przeglądarki. Na Macu i na Linuxie
będzie to możliwe jeżeli zainstalujemy sobie do vagranta taki plugin. Wystarczy
że w terminalu wpiszesz vagrant plugin install vagrant notify forwarder. Tyle
wystarczy i to będzie działać. Dlatego ja siebie mogę spokojnie uruchomić to
co tutaj mamy czyli npm install, wewnątrz maszyny wirtualnej, a zmieniać
pliki na zewnątrz. Natomiast jeżeli ty jesteś na Windowsie to musisz mieć
w Windowsie zainstalowany note i będąc tutaj przechodząc
terminala właśnie w Windowsie, a nie wewnątrz wirtualnej maszyny wpiszesz
to co ja wpiszę za moment i ja zatem na Macu
czy na Linuxie mogę zrobić tak że nie muszę mieć note zainstalowane
w moim systemie, bo ono jest zainstalowane wewnątrz wirtualnej maszyny. Zatem przyjdziemy
sobie teraz do terminala i będąc wewnątrz wirtualnej maszyny wpisze
npm install i to sprawi że wszystkie należności z pliku
package json zostaną zainstalowane i będziemy mogli uruchomić
sobie ten serwer wpisując npm run watch. Okej,
zatem wpisuje npm install i będziemy musieli chwilę poczekać pamiętaj, że jeżeli jesteś na Windowsie
musisz wpisać to polecenie, ale terminalu, który nie jest wewnątrz
wirtualnej maszyny, ale u ciebie w systemie. Okej,
wszystko się zainstalowało i teraz możemy wpisać npm run watch i
to wykona nam ten oto skrypt, zobaczymy okej
bo jakieś finito się uruchomiło i teraz co to dla nas oznacza. Otóż
dla mnie uruchomiłem to wewnątrz wirtualnej maszyny i dla ciebie jeżeli uruchomiłeś
to na zewnątrz wirtualnej maszyny w Windows'ie, oznacza to tylko tyle, że
możemy przyjść teraz pod zdefiniowany wcześniej przez nas adres i może
to być larablogger.test:3002, ważne żeby IP byłO odpowiednie, więc
wiemy, że ten host kieruje tam gdzie kierować powinien. Jeżeli tam przyjdziemy, to
również wczyta to się nasza strona, ale ona teraz będzie się automatycznie odświeżać jeżeli
coś zmienimy, więc co możemy zmienić. Widzimy
że tutaj śledzimy zmiany na przykład w pliku SCSS. Czyli
jeżeli ja bym tutaj przeszedł do sass i na przykład do Helpers,
tutaj mam viariables i mam zdefiniowaną taką zmienną sass, która mówi jaki
jest kolor tła. Jeżeli zamienie na kolor czerwony, zapisze i od
razu bardzo szybko przyjdę przeglądarki zauważ nic nie naciskam kompletnie zostało
to automatycznie odświeżone, nawet strona się nie odświeżyła tylko style zostały wstrzyknięte i
co ważne działają tutaj source mapy, o których wspominałem wcześniej, bo jeżeli
sobie podejdziemy body to od razu widzimy w tym miejscu że w pliku general.scss
jest zdefiniowany ten kolor i dokładnie tak też się dzieje bo jeżeli
byśmy przeszli do general.scss, w linijce 11,
tutaj jest zdefiniowany właśnie ten kolor, więc wycofam te zmiany ale to
już ci pokazuję że faktycznie po
zapisaniu automatycznie to się odświeża. Jeżeli zmienimy coś jakimś widoku blade powinno
to zostać również automatycznie odświeżone więc przejdźmy na przykład do posts,
zapisuje ten plik i tym strona już całkowicie się
przeładowuje ale jak widzisz bez problemu to działa więc tak można wygodnie pracować
na nad frontend'em. Natomiast na koniec pokażę ci jeszcze jedną
bardzo ważną rzecz, mianowicie w momencie kiedy skorzystaliśmy z mix'a
czyli kiedy wykonałem npm run watch w pliku mix
manifest pojawiło się coś takiego. Ten plik w zasadzie został utworzone tutaj w
public i pojawiło się tutaj coś takiego, czyli wygenerowało dla nas plik main.css,
a więc podało go również tutaj, razem z taką oto ścieżką,
z takim query stringiem. Tutaj jest hash tego pliku zapisany i to oznacza,
że jeżeli cokolwiek w pliku się zmieni, a to z kolei oznacza, że cokolwiek
się zmieniło gdzieś indziej w naszych plikach źródłowych, wtedy ten hash również
będzie zmieniony, więc super byłoby linkować właśnie coś takiego, w naszym
pliku master, dzięki temu jeżeli cokolwiek zmienimy w CSS'ie i
wstawimy nową wersję naszej strony na produkcję, to każdy kto w nią wejdzie będzie
musiał pobrać ten plik czyli przeglądarka kiedy zobaczy że tutaj jest inne id to
jest to tak naprawdę inny adres i ten plik będzie musiał pobrać od nowa u takiego
użytkownika. Dzięki temu unikniemy problemu, że my coś zmieniliśmy w CSS'ie, a
nasi użytkownicy cały czas mają serwowaną wersję pamięci z podręcznej przeglądarki. Natomiast
w jaki sposób można to podlinkować, skopiujemy sobie ten adres, który jest tutaj. Przejdziemy
teraz do master i w miejscu u góry gdzie korzystaliśmy z takiego
na sztywno zapisu wykorzystany funkcje mix, która
jest dostępna i w tejże funkcji mix podam tą ścieżkę. Ta
funkcja robi bardzo prostą rzecz. Podaną ścieżkę wyszukuje w json'nie
tutaj i zwraca to co jest na niej przypisane po prawej stronie, więc jeżeli teraz
odświeżymy i podejrzymy źródło strony to CSS jest linkowany
w taki oto sposób i zapewniam cię że jeżeli cokolwiek się tym pliku zmieni to
ta ścieżka również zostanie tutaj zmieniona w zasadzie to id zostanie modyfikowane
i taki plik będzie musiał się pobrać od nowa u każdego użytkownika.
https://laravel.com/docs/5.8/mix
https://github.com/mhallin/vagrant-notify-forwarder
https://github.com/mhallin/vagrant-notify-forwarder
https://laravel.com/docs/5.8/mix
webpack.mix.js · 3 min
mix.disableNotifications();
mix.browserSync({
port: 3002,
proxy: "larablogger.test",
open: false,
notify: false,
});
if (!mix.inProduction()) {
mix.webpackConfig({ devtool: "inline-source-map" }).sourceMaps();
}
mix.sass("resources/sass/main.scss", "public/css").version();webpack.mix.js · 3 min
mix.disableNotifications();
mix.browserSync({
port: 3002,
proxy: "larablogger.test",
open: false,
notify: false,
});
if (!mix.inProduction()) {
mix.webpackConfig({ devtool: "inline-source-map" }).sourceMaps();
}
mix.sass("resources/sass/main.scss", "public/css").version();webpack.mix.js · 3 min
mix.disableNotifications();
mix.browserSync({
port: 3002,
proxy: "larablogger.test",
open: false,
notify: false,
});
if (!mix.inProduction()) {
mix.webpackConfig({ devtool: "inline-source-map" }).sourceMaps();
}
mix.sass("resources/sass/main.scss", "public/css").version();