Základní uspořádání a výchozí adresářová struktura
Výchozí balíček, který si můžete stáhnout zde, má určitou strukturu a uspořádání, které si zde představíme a které se následně prolíná celou dokumentací. Řekneme si kde co je a proč to tak je.
Je nutné poznamenat, že tato předdefinovaná struktura není pevná. Ano, je to struktura ke které jsem postupně došel jako k optimální, ale není pevně dána a mám i své projekty, kde je struktura jiná (jednoúčelové vysoce specializované aplikace). Ostatně vše si můžete nastavit jak potřebujete a když jste si jistý, že pro určitou situaci je vhodnější jiné řešení, tak tuto možnost využijte a strukturu si upravte. Ovšem pro účel vysvětlení jak Jet funguje je třeba jeden pevný bod (tak říkajíc) a tím je tato výchozí struktura. A teď už k věci ...
Základní rozlišení
Než se pustíme do jednotlivých adresářů a podadresářů, řekněme si něco k obecným principům, které platí pro celou strukturu.
Adresáře se znakem _ na začátku
To jsou adresáře obsahující například instalátor a vývojářské nástroje (zejména Jet Studio) - tedy pomocné nástroje nesouvisející s reálným provozem aplikace. Adresáře jsou takto odlišené, protože na produkčním serveru nemají co dělat. To je hlavním smyslem toho znaku _. Ukázat co nemáte nahrávat na server ze kterého běží produkční instance vaší aplikace. A když už to tam na chvíli potřebujete, tak to tam nenechávejte trvale. Tedy znak _ rovná se interní / dočasná věc.
Adresáře s velkým písmenem na začátku
To jsou adresáře, kde najdete nějaké třídy (teoreticky i funkce). Jednoduše řečeno nějakou aplikační logiku, část logiky, komponentu aplikace.
Adresáře s malým písmenem na začátku
Malé písmeno znamená: zde nehledej třídy. Zde najdete hlavně data, nebo view skripty. Jaká data? Například konfigurační soubory, slovníky pro překladač, stavová data aplikace, keš a tak dále.
Soubory *.php vs *.phtml
Jedná se o základní rozlišení view skripty (tedy skriptu generujícího výstup) a skriptu obsahujícího nějakou aplikační logiku.
Popis výchozí adresářové struktury
Nyní si projdeme jednotlivé adresáře, ovšem ty nejdůležitější schválně nechám na konec.
~/_installer
Pokud jste si již ukázkovou aplikaci balíku Jet nainstalovali, tak zde je instalátor, který vás instalací provedl. Je to samostatná mini aplikace. Má být přítomna pouze pro instalaci a následně má být vámi odstraněna.
Instalátor může soužit jako základ pro váš vlastní instalátor. Chcete na Jetu postavit třeba své CMS? Fajn, může mít i instalátor a zde je základ.
Kromě toho, jak jsem již zmínil, je to samostatná mini aplikace, která je ovšem sama o sobě na Jet postavená a slouží zároveň jako ukázka jednoho z přístupů a strategie tvorby online aplikací.
~/_profiler
Profiler je samostatné téma. Tedy více viz příslušné kapitoly. Ale pro pořádek je to mini aplikace, která vám pomůže s laděním výkonu vašeho projektu. Protože má znak _ na začátku, tak je určena jen a pouze pro vás, vývojáře, a na produkčním prostředí nemá co dělat (určitě ne trvale).
~/_playground
Jednoduché skripty určené pro rychlé otestování PHP Jet s pomocí zabudovaného web serveru PHP. Z logiky věci samozřejmě nemá tento adresář na produkční prostředí co dělat.
~/_tools
V tomto adresáři najdete pomocné nástroje určené pro vás, které vám pomůžou s vývojem.
~/_tools/cli
Pár pomocných nástrojů použitelných z textového prostředí (nebo příkazového řádku, chcete-li).
~/_tools/studio
Další mini aplikace (i když ta už není moc mini) a nástroj, který mě osobně hodně usnadňuje život: Jet Studio. Zde si prostě všemožné naklikáte. Je to velké téma a nejlepší je si to prostě vyzkoušet.
Jet Studio je online aplikace a tedy dostanete se k ní přes URL. Odkaz je na domovské stránce ukázkové aplikaci.
A mimochodem je to ukázka další možné strategie tvorby online aplikace...
~/cache
Adresář určení pro odkládání dat keše pokud backend keše používá soubory (a ne třeba něco jako Redis). Adresář je využíván Jetem a samozřejmě plně využitelný vaší aplikací.
~/logs
Různé logy. Například na toto místo ukládá ErrorHandler záznamy o chybách.
~/tmp
Zde asi není co vysvětlovat ... :-)
~/css, ~/js a ~/images
K čemu jsou předurčené tyto adresáře je zřejmé z jejich názvů. Důležité je, že jsou to přímo přístupné adresáře přes URL (ještě spolu s ~/_tools/studio/). Veškerý ostatní provoz (http požadavky) je směrován na boostrap aplikace.
Pokud potřebujete další takové adresáře (napadá mě třeba ~/files/, ~/pdf/ a podobně), klidně si je vytvořte.
Předpokládám, že si umíte patřičně upravit .htacces pro váš Apache, nebo konfiguraci NGinx (či jiného serveru). Tedy toto téma zde nebudu rozebírat (a případně tak dublovat dokumentaci příslušných webserverů).
~/library
Jak název napovídá, tak tento adresář je určený pro knihovny.
Zde v adresáři ~/library/Jet naleznete Jet samotný.
Ovšem adresář je určen i pro další knihovny v projektu použité - nejen pro Jet.
V praxi se mi osvědčilo takto separovat vše (především knihovny třetích stran), kam ani já ani kolegové nemáme sahat. Rozhodně ne bez koordinace a rozmyslu a zvážení (a otestování) důsledků. Tedy je jasně separováno co je naše aplikace a co komponenta, která by vlastně měla být nedotknutelná.
~/application
Hurá! Konečně jsme u toho nejdůležitějšího adresáře. Toto je to, čemu říkám aplikační prostor a je to právě to místo, kde je naše hlavní "hřiště". Zde se ukrývá celá aplikace a vše co s ní souvisí. Pojďme si to tedy rozebrat.
~/application/bases
Adresář určení pro jednotlivé báze MVC.
Co že to je? Na to je třeba nastudovat jak v Jet funguje MVC. Ve své podstatě je to jednoduché, ale jednou větou se to říct nedá, ovšem zkusím to: Zde jsou uložené definice jednotlivých částí projektu (např. administrace, REST API a také té veřejně viditelné části ať je to web, e-shop, nebo cokoliv jiného) a jednotlivých stránek.
Tedy například definice toho co se má stát na URL https://muj-web/o-nas/ je právě zde.
Napadlo vás slovo "routování"? Ano, dá se to tak říct. Ale zdaleka to není jen pouhé routování. Vše se dozvíte později.
Krom definic jsou v tomto adresáři i základní view a layouty. Pokud se vám zdá, že to nemá logiku, tak vězte že má. Uvidíte :-)
~/application/config
Zde je řada konfiguračních souborů a konfiguračních skriptů. Více o tématu najdete zde.
~/application/data
V tomto adresáři jsou uložená interní data aplikace. Tedy data, která aplikace potřebuje, ale nesmí k nim být přístup z venčí.
Například se jedná o seznam nainstalovaných a aktivních modulů a tak dále.
Adresář je určen jak pro Jet, tak pro libovolné využití vaší aplikací.
~/application/dictionaries
Jak název napovídá, tak zde jsou uložené slovníky překladače.
~/application/menus
Zde jsou definice různých meníček. Opět více info v samostatném tématu. Ale stručně řečeno zde najdete definici kořenových menu administrace vaší aplikace a spousty dalších - jak budete potřebovat.
~/application/Autoloaders
A hele ... Velké písmeno na začátku, tedy tam budou schované nějaké třídy :-). A je to tak.
V tomto adresáři jsou jednotlivé Loadery, tedy moduly Autoloaderu.
~/application/Init
Zde jsou inicializace jednotlivých subsystémů.
Chcete vědět (a hlavně ovlivnit) jak se "nahazuje" například AutoLoader? Najdete to právě zde v inicializačním skriptu ~/application/Init/Autoloader.php.
Podrobné vysvětlení ke každé inicializaci najdete vždy u popisu příslušné části systému, tedy zde nebudu uvádět soupis a popis všeho co v inicializaci je.
Důležité je vědět, že "nahazování" něčeho máte hledat právě zde.
~/application/ErrorHandlers
ErrorHandler má své moduly v toto adresáři ErrorHandlers.
Tedy adresář je určen pro moduly, které provádí finální operaci s chybami aplikace. To znamená jejich zobrazení, logování a podobně.
~/application/Classes
Zde jsou vaše třídy - třídy vaší aplikace.
Jak se dozvíte, tak Jet je modulární. Umožňuje aplikaci rozdělit do modulů a já tento přístup pro většinu projektů vřele doporučuji.
Ale i modulární aplikace má své obecné třídy. Příklad? Takovou obecnou třídou může být například třída předtavující článek. A s článkem pak pracuje jeden modul určený pro administraci, další modul článeky zobrazuje na webu a další představuje REST API. Ale stále tyto moduly pracují s jednou entitou představující článek (nebo zboží, prostě cokoliv vás napadne).
A právě pro takové obecné třídy je určen tento adresář - vlastně jeden z nejdůležitějších adresářů.
~/application/Modules
Vedle adresáře Classes nejdůležitější adresář a také jádro vaší aplikace.
Dle názvu je jasné, že zde najdete moduly. A k tomu již opravdu nedokážu nic stručně napsat a musím odkázat na příslušné kapitoly.
~/application/bootstrap.php
Tento skript je vstupní bod aplikace. Právě na něj je nasměrovaný veškerý provoz pomocí .htaccess (či jiných nastavení - dle vašeho web serveru).
Zavolá konfiguraci, inicializaci a následně spustí sekvenci zpracování MVC.