Java týden
Procvič si angličtinu zdarma s naším americkým e-learningem! Learn more
Pouze tento týden sleva až 80 % na celý Java e-learning!

Lekce 5 - Jednoduchý redakční systém v Laravel - Struktura projektu

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

V minulé lekci, Dokončení kalkulačky v Laravel, která byla věnovaná především základům a vysvětlení nezbytných principů, jsme dokončili velmi jednoduchou aplikaci. Dnes ovšem začneme s novým projektem a to právě se slíbeným jednoduchým redakčním systémem. Tento projekt už může být pro některé zajímavější, jelikož si vyzkoušíme práci s dalšími komponentami, které nám Laravel nabízí. Jedna z těchto komponent je například Eloquent, jenž zajišťuje ORM pro práci s databází. V dnešní lekci si však projdeme strukturu projektu a to také kvůli tomu, že tentokrát si už musíme projekt nastavit.

Struktura Laravel projektu

Reálné komerční projekty mají spoustu tříd a souborů a určitě bychom si v nich nevystačili pouze s rozdělením struktury projektu na kontrolery, modely a pohledy. Mít v jedné složce desítky souborů je minimálně nepřehledné. Kód by se špatně spravoval a dostali byste se do bodu, kdy byste psali podobné metody znovu a znovu místo toho, abyste parametrizovali nějakou existující, protože byste zkrátka ani nevěděli, že v projektu nějaká podobná již je. A to je začátek konce. Jak z toho ven?

Třídy rozdělíme do logických skupin a určitě vás nepřekvapí, že za tímto účelem využijeme jmenných prostorů. To je přesně ten nástroj určený k řešení právě problému s vysokým počtem tříd. Laravel však není pouze jednoduchý MVC framework. Obsahuje velké množství komponent, se kterými můžeme pracovat, tudíž si nevystačíme ani s jednoduchým rozdělením do několika složek.

Laravel nám dává svobodu nad uspořádáním našeho projektu. Nevytváříme si tak žádné moduly a ani se projekt nerozděluje na "balíčky". Hlavním kritériem pro rozdělení tříd a jiných souborů je jejich úloha. Každá část logiky aplikace má tedy nějakou vlastní hlavní složku, kam patří, a už je jen následně na nás, jestli si v těchto složkách vytvoříme podsložky pro jednotlivé části aplikace (například administrace článků), nebo ne. Každopádně vytváření podsložek se určitě hodí pro větší aplikace (lepší orientace, kam co patří) a my toto aplikujeme na našem projektu.

Struktura frameworku

Pojďme si nyní popsat výchozí strukturu Laravel frameworku, kterou budeme v následujících lekcích také rozšiřovat. Momentálně adresářová struktura naší aplikace vypadá následovně:

  • app/ - Obsahuje jádro naší aplikace a zahrnuje všechny různé komponenty od kontrolerů až po vlastní události
    • Console/ - Vlastní Artisan příkazy Laravel konzole. Stejně jako existuje příkaz make:controller, který jsme použili v lekci První aplikace v Laravel, si můžeme vytvářet své vlastní. K tomu se však dostaneme v dalších lekcích
    • Exceptions/ - Výjimky
    • Http/ - Obsahuje téměř vše ohledně logiky zpracovávající požadavky
      • Controllers/ - Kontrolery
      • Middleware/ - Middleware třídy
    • Providers/ - Obsahuje třídy, které se nám starají například o registrování vlastních událostí nebo nastavení zpracovávání požadavků
  • bootstrap/ - Obsahuje zavádějící soubor frameworku a také mezipaměť vygenerovaných rout a balíčků. Této složky se během našeho projektu ani nedotkneme
  • config/ - Obsahuje konfiguraci projektu
  • database/ - Obsahuje databázové migrace a třídy pro zaplnění databázových tabulek falešnými daty
  • public/ - Kořenový adresář celého webu (přístupový bod, kde všechny umístěné soubory jsou přístupné zvenčí). Také obsahuje soubor index.php, který zpracovává všechny požadavky na web
    • css/ - CSS soubory
    • js/ - JavaScript soubory
  • resources/ - Obsahuje nezkompilované zdrojové soubory pro front-end a překlady aplikace
    • js/ - Nezkompilované JavaScript soubory
    • lang/ - Obsahuje soubory s frázemi a jejich překlady
    • sass/- Nezkompilované SCSS soubory
    • views/ - Pohledy
  • routes/ - Routování našeho webu, API, vlastních Artisan příkazů a kanálů pro WebSocket
  • storage/ - Obsahuje souborové relace uživatelů, logy, možné skladiště pro námi vygenerované soubory a mezipaměť vygenerovaných Blade pohledů a dalších souborů
  • tests/ - Automatizované testy pro otestování funkčnosti částí aplikace
  • vendor/ - Knihovny spravované přes Composer

Možná se ptáte, kde je složka s modely? Ve dřívějších verzích k tomu byla určená složka models/, od toho se však opustilo. Vývojáři frameworku považuji slovo "model" za nejednoznačné, protože pro každého to může znamenat něco jiného. Proto, jak už bylo zmíněno, je pouze na samotném vývojáři aplikace, kam si modely bude ukládat. Ve většině případů se ale používá pouze složka app/.

I když se ze začátku může zdát, že struktura frameworku je až příliš složitá a rozvětvená, nezoufejte. Časem se naučíme používat mnoho z dostupných komponent a tím se také budeme více orientovat v našem projektu.

Vytvoření nového projektu

Je na čase si vytvořit nový projekt, se kterým budeme pracovat v nadcházejících lekcích. Základní instalaci a spuštění nové Laravel aplikace jsme si již ukazovali v lekci Instalace Laravel a zprovoznění projektu. Náš projekt si pojmenujeme jako laravel-cms (Laravel Content Management System).

Instalace Node.js

Na rozdíl od minulého projektu počítáme s tím, že budeme také pracovat s front-end částí aplikace. Proto potřebujeme něco, co se nám bude starat o externí knihovny a zkompiluje námi vytvořené soubory, jako jsou CSS, JavaScript, SCSS a další. Z toho důvodu si stáhneme a podle instrukcí nainstalujeme Node.js, jehož instalátor obsahuje i právě potřebný systém balíčků npm. Tento instalátor lze stáhnout ze sekce download. Instalaci Node.js případně najdete v kurzu Node.js.

Po dokončení instalace již pouze stačí v kořenové složce projektu spustit příkaz npm install, jenž nám stáhne a připraví potřebné knihovny do automaticky vytvořené složky node_modules/.

Front-end frameworky

Bootstrap

Laravel již výchozím nastavení importuje CSS framework Bootstrap. Jedná se o dokonalé řešení pro projekty, které jsou zejména zaměřené na back-end, a jeho vývojáři se tak nemusí starat o složité designování. Místo toho se však využijí předpřipravené styly, ikonky a widgety vytvořené a naimportované právě tímto CSS frameworkem. Toho jsem také lehce využil v předchozích lekcích.

Na importování Bootstrap se můžeme podívat do SCSS souboru resources/sass/app.scss, kde používáme právě balíček spravovaný přes npm:

// Bootstrap
@import '~bootstrap/scss/bootstrap';

Bootstrap se následně vloží do hlavního souboru po zkompilování a nemusíme ho tedy linkovat z externí služby, to si však ukážeme v tomto seriálu později.

jQuery

Dalším defaultně importovaným front-end frameworkem je jQuery. Ten nám rozšíří JavaScript o důležité funkce a tím i ulehčí práci s HTML dokumentem.

Importování jQuery a dalších balíčků spravovaných přes npm probíhá v JavaScript souboru resources/js/boostrap.js (můžete si klidně vytvořit i vlastní) přes Node.js funkci require():

try {
    window.Popper = require('popper.js').default;
    window.$ = window.jQuery = require('jquery');

    require('bootstrap');
} catch (e) {}

Importované knihovny a frameworky se opět vloží do hlavního souboru po zkompilování. Jak však můžeme vidět na části souboru výše, nejedná se o jediný externí balíček, který Laravel ve výchozím stavu definuje. jQuery a Bootstrap jsou však hlavními front-end frameworky, se kterými budeme pracovat, a stojí za to si je zmínit.

Konfigurování projektu

Jelikož v dalších lekcích budeme pracovat s databází, měli bychom se také podívat na konfiguraci našeho projektu. Tu překvapivě najdeme v souboru .env v kořenové složce projektu. Proměnné definované v tomto souboru jsou následně použité konfiguračními soubory ve složce config/ a tyto proměnné můžeme navíc využít i v našem vlastním kódu.

V následující část souboru upravíme zmíněné proměnné na vlastní hodnoty:

APP_NAME="Laravel CMS"
APP_ENV=local
APP_KEY=base64:2QMv19PNck4Yo4VFsiLXhznApNffWzBccxfsfUvbKOc=
APP_DEBUG=true
APP_URL=http://localhost:8000

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_cms
DB_USERNAME=root
DB_PASSWORD=password

...

Jak si můžete všimnout, víceslovné hodnoty musí být uvedené v uvozovkách. Toho využíváme u názvu naší aplikace definovaného proměnnou APP_NAME. Hodnota APP_KEY je už vygenerovaná z instalace, tu měnit nemusíme. Změníme však hodnotu proměnné APP_URL na URL adresu odkazující na náš projekt. Nakonec také upravíme skupinu proměnných definující nastavení připojení k databázi, což se nám hodí do další lekce.

Zbytek proměnných zatím necháme tak, jak jsou.

Pokud je ve vašem .env souboru hodnota proměnné APP_KEY prázdná, použijte příkaz php artisan key:generate pro vygenerování nového klíče.

Nyní tedy předpokládám, že již máme vše nastavené. Tím ale také tato lekce končí. Vše jsme si pěkně připravili pro další lekci, Jednoduchý redakční systém v Laravel - Migrace, kde nás čeká ORM nad databází a práce s migracemi.


 

 

Článek pro vás napsal Jan Lupčík
Avatar
Jak se ti líbí článek?
1 hlasů
Autor se primárně věnuje vývoji webových stránek a aplikacích v PHP (speciálně ve frameworku Laravel) a je jedním z vývojářů komunitního módu TruckersMP.
Předchozí článek
Dokončení kalkulačky v Laravel
Všechny články v sekci
Laravel framework pro PHP
Miniatura
Následující článek
Jednoduchý redakční systém v Laravel - Migrace
Aktivity (4)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!