Lekce 1 - Úvod do Laravel frameworku pro PHP
Vítejte u první lekce kurzu tvorby webových aplikací v PHP frameworku Laravel. Laravel je kompletní framework pro PHP, který výrazně zjednodušuje tvorbu webových aplikací. Jedná se o kvalitně objektově navržený a zároveň o ve světě nejrozšířenější PHP framework. Díky své popularitě na něj existuje i spousta návodů a obsáhlá oficiální dokumentace. Jsou na něm postavené větší i menší projekty, některé z nich lze najít třeba na této stránce. Za zmínku také stojí, že základním stavebním kamenem tohoto frameworku je framework Symfony, avšak jeho znalost není nutností, jelikož ve výsledku se tyto dva frameworky dost liší.
Laravel si zakládá na jednoduchém a přehledném kódu. Je význačný tím, že je optimalizovaný pro reálné webové aplikace. To znamená, že vše je už předpřipravené a komponenty lze vygenerovat pomocí jednoduchých příkazů v terminálu. Pokud Laravel budete umět, vytváření webových stránek bude trvat zlomek toho, co v čistém PHP.
V dnešním tutoriálu si vysvětlíme, proč bychom obecně měli používat PHP frameworky, a řekneme si, jak Laravel funguje.
Tento kurz je psaný pro Laravel verzi 8.x.
Pozor, dodržuj přesné verze komponent/frameworku! Pokročilé projekty jako tento jsou složené z komponent. Možná by tě napadlo použít nejnovější verzi nějaké komponenty, co zrovna včera vyšla. Projekt ti pak ale bez odborné úpravy pravděpodobně nebude fungovat! U verzí komponent neplatí jako např. u aktualizace Windows, že chceme každý den používat tu nejnovější. Neustálé aktualizace všeho by totiž vyžadovaly každodenní a komplexní změny kódu projektu a reálně se tak neprovádějí. Ze stejného důvodu i my aktualizujeme kurzy v pravidelných intervalech a nové verze k sobě pak sladíme tak, aby vše fungovalo.
Proč používat framework
Framework je ucelený soubor do sebe pasujících knihoven. V PHP se bez kvalitních knihoven u vážnějších projektů neobejdete. Jsou k tomu hned dva důvody.
- Ačkoli je PHP velmi vysoký jazyk a obsahuje spoustu užitečných funkcí, časem začnete narážet na mezery v jeho standardních knihovnách. Mnoho důležitých funkcí v něm totiž chybí, nebo se s nimi velice špatně pracuje. Poté, co zjistíte, že jste si v každém projektu znovu a znovu programovali databázovou třídu, obsluhu formulářů nebo stránkování tabulky, nutně vás napadne si pro tyto základní činnosti vytvořit jednoduché knihovny.
- Pokud programujete v čistém PHP, zhruba asi 50 % kódu je nepotřebný balast. S použitím kvalitních knihoven napíšete aplikaci za polovinu času a s polovičním počtem řádků. Aplikace bude snadno udržovatelná a její tvorba vás bude bavit. Nebudete stále vynalézat kolo a řešit ty samé rutinní záležitosti (jako např. jak ověřit, zda-li je uživatel administrátor), budete se naopak věnovat vymýšlení zajímavých funkcí aplikace a o tom programování přeci je.
Framework si můžete vytvořit buď vlastní, nebo použít nějaký hotový, kterým je právě Laravel.
Potřebné znalosti
Laravel je hlavně veliká sada znovupoužitelných komponent, na níž je postavený framework pro tvorbu webových aplikací. Když programujete v Laravel frameworku, programujete stále v PHP a navíc využíváte těchto komponent, které jsou objektově navržené a staví na principech MVC architektury. Proto pro použití Laravel frameworku musíte mít s PHP pokročilé zkušenosti, znát dobře objektově orientované programování a také alespoň základy MVC architektury. Učit se Laravel bez těchto znalostí je zbytečný výdej energie, protože neporozumíte jeho principům a jen ztratíte svůj čas. Pokud neznáte OOP nebo MVC, přečtěte si prosím nejprve tyto dva místní kurzy.
Pro snaživce doporučuji též nastudovat bezpečnost webových aplikací a návrh softwaru, abyste následně porozuměli určitým praktikám, které se v tomto frameworku používají.
Jak Laravel funguje
Na úvod si popíšeme základní termíny a způsoby, jak Laravel funguje.
MVC
Jak již bylo řečeno, Laravel je MVC framework, takže je asi dobré si zopakovat, co to vlastně znamená.
Aplikace je složena z součástí třech typů, které se dělí o 3 základní úlohy:
- řízení,
- logiku,
- výstup.
Jen takto rozdělená aplikace je totiž přehledná a snadno rozšiřitelná.
- Kontrolery (Controllers), řízení - Kontroler je část, se kterou komunikuje uživatel. Předá jí parametry a ona mu vrátí data (např. HTML stránku). Kontroler typicky parametry předá modelům, od kterých získá data. Tato data předá pohledům (šablonám), které data začlení do nějakého HTML kódu. Tento HTML kód pošle kontroler uživateli do prohlížeče. Funguje tedy jako takový prostředník.
- Modely (Models), logika - Obsahují logiku aplikace, jako např. práci s databází nebo výpočty. Každá datová entita má většinou právě svůj model (uživatel, článek, komentář, ...).
- Pohledy (Views), výstup - Obsahují Blade šablony (s HTML kódem). Blade je šablonovací systém, který na rozdíl od ostatních systémů nezakazuje používání PHP kódu v pohledu, tudíž neslouží pouze pro vkládání proměnných do HTML kódu. Blade používá speciální syntaxi, jež je poté převedena na normální PHP kód, a zároveň tento vygenerovaný pohled je následně uložen do mezipaměti pro příští použití kvůli rychlejšímu načítání (pokud není daný pohled modifikován).
Routování
Než se uživatel dostane ke kontroleru, narazí na tzv. routování (česky směrování). Úkolem této vrstvy je podle URL adresy poznat, co uživatel chce, a zavolat mu příslušný kontroler, který jeho dotaz obslouží.
Routy mohou být definované několika způsoby. Požadovanou akci může obsloužit pouze jednoduchá námi definovaná anonymní funkce, a nebo se o danou akci postará kontroler. Laravel za nás může dokonce vygenerovat akce, které zřejmě bude každá naše datová entita (článek, uživatel, kategorie, ...) potřebovat. Ti znalejší už zřejmě tuší, že narážím na CRUD (Create, Read, Update, Delete), o tom si ale povíme v seriálu později.
Životní cyklus
Při použití frameworku si musíte být jistí tím, co se uvnitř odehrává, jinak se z programátora degradujete na experimentátora. Popišme si životní cyklus aplikace v Laravel frameworku - tedy co se stane, když uživatel zadá do adresního řádku např.:
obchod.cz/book/harry-potter
Životní cyklus stránky je jednoduše zobrazený obrázkem níže. Hned si ho popíšeme.

- Jako první se požadavek dostane k routování. Zjistí se, o jaký požadavek se jedná (a na jaký kontroler a jeho metodu směřuje) a co vše se má zkontrolovat a stát před předáním dat dále pomocí nastavených pravidel u samotné routy.
- Požadavek se profiltruje přes tzv. middleware třídy, které mohou být definované už před samotným routováním, a nebo až v kontroleru. V našem případě se může jednat o ověření toho, že uživatel je přihlášený a má práva na prohlížení knížek. Nebo se jen zkontroluje, zda-li předaný parametr neobsahuje znaky, které tam mít nechceme. Middleware si můžete představit jako takovou ochranku, jež vás zkontroluje před vstupem dovnitř.
- Podle adresy už framework ví, že chceme něco s knihami. Proto se zavolá
BookController
a jeho metodashow()
pro zobrazení knížky, jelikož daná adresa splňuje nastavenou routubook/{book}
. Kontroleru se předá parametr z URL adresy, tedy nějaký identifikátor knížky. - Nyní se zjistí, jaké všechny parametry metoda akce vyžaduje. Můžeme např. předat speciální třídu pomocí dependency injection, jež nám zvaliduje odeslaná data (formulář). V našem případě to ale bude jen instance modelu.
- Následně si kontroler získá instanci modelu
Book
s daty z databáze pomocí předaného identifikátoru"harry-potter"
. BookController
předá data z modelu pohledu (šabloně).- Šablona obsahuje HTML stránku pro zobrazení knížky a v ní nějakou Blade syntaxi i pro vypsání dat knížky. Pomocí Blade enginu se vygeneruje výsledná HTML stránka.
BookController
dostane zpět ze šablony výsledné HTML a to pošle uživateli jako odpověď.- Uživateli se v prohlížeči zobrazí HTML stránka a vůbec netuší o tom
všem, co jsme si tu nyní popsali
Pokud nyní některým krokům plně nerozumíte, nezoufejte. Vše si v kurzu postupně vysvětlíme. Jde jen o to, abychom pochopili, co vše se odehrává na pozadí a jak složitý může jeden požadavek být. Při správném používání komponent frameworku může parametr klidně projít desítky tříd, než se vůbec dostane ke kontroleru.
Co byste ještě měli vědět
- Každý kontroler má typicky hned několik svých šablon pro různé metody (detail, přidání, seznam, ...).
- Ve většině případů každý model zastupuje jednu databázovou tabulku. Každý záznam v tabulce je poté instance modelu této tabulky s předanými hodnotami z databáze.
- Každá část logiky má v Laravel frameworku své místo. Už jsme si trochu nastínili middleware třídy, stejně tak můžeme mít třídu pro validaci odeslaných dat (např. přes formulář), třídu pro kontrolování práv atd. O většině těchto tříd si řekneme v průběhu seriálu, všechny jsou ale detailně popsané v oficiální dokumentaci.
To by bylo do úvodu vše.
Příště, v lekci Instalace Laravel a zprovoznění projektu, si zprovozníme první projekt v Laravel frameworku.
Měl jsi s čímkoli problém? Zdrojový kód vzorové aplikace je ke stažení každých pár lekcí. Zatím pokračuj dál, a pak si svou aplikaci porovnej se vzorem a snadno oprav.