Framework

Popis frameworku

Cílem této kapitoly je poskytnout základní přehled frameworku, který redakční systém využívá. S jeho znalostí budete moci psát vlastní knihovny a upravovat již existující. Detailnější popis jednotlivých tříd, funkcí a skriptů naleznete v dokumentaci k API (automaticky generované pomocí PHPDoc).

Dále je vhodné, pro snazší pochopení, průběžně konzultovat zde uvedené informace s hlavní knihovnou Core (vhodný příklad).

Základní princip

Každá stránka, která má být veřejně přístupná (pomocí URL), musí obsahovat následující fragment kódu:

define('APP_REQ', true);
require_once('../App/Req/rConfig.php');

Inicializace jádra

Inicializaci jádra zajišťuje skript /Lib/Core/Req/rInit.php . Ten provádí:

Implicitní/globální objekty

Framework zavádí tzv. implicitní objekty, které lze chápat jako globální a tedy kdekoliv použitelné objekty poskytující aplikaci základní funkčnost.

Jejich zpřístupnění ve třídách a funkcích je podmíněno použitím konstrukce: global <gProm>;

$gConfig (array)
Pole obsahuje konfiguraci aplikace a konfiguraci knihoven. Při importu knihovny jsou automaticky do tohoto pole přidány hodnoty z konfiguračního souboru dané knihovny.
$gRequest (class cHttpRequest)
Třída pro práci s http požadavkem (načítání parametrů, načítání infomrací o spojení a o použitém softwaru klienta, atd).
$gResponse (class cHttpResponse)
Třída pro práci s http odezvou (manipulace s cache pametí PHP, přesměrování, odesílání hlaviček, atd).
$gSession (class cHttpSession)
Třída pro práci s relací (manipulace s daty v relaci, atd).
$gLib (class cLibManager)
Třída pro základní práci s knihovnami (import knihovny, načtení konfiguračních a jazykových souborů, načtení SQL dotazů, spuštění dané akce atd).
$gDb (class cAdodb)
Třída poskytující databázové operace (select, insert, update, delete atd.). Využívá třídy ADOConnection z balíku ADOdb.
$gSql (class cSqlManager)
Ttřída pro manipulaci s SQL dotazy jednotlivých knihoven.
$gLang (class cLangManager)
Třída spravuje jazykově závislé texty a umožňuje jejich parametrizaci (doplnění konkrétních hodnot textu za běhu).
$gContent (class cContent)
Třída reprezentuje obsah, který si uživatel vyžádal (tedy obsah určeným identifikátorem v URL).
$gException (class extends Exception | class eUserException)
Třída reprezentující výjimku v systému. Tato proměnná je definována pouze v případě, že právě zobrazovaná stránka má nějakou výjimku ošetřit. Typicky jde uživatelské výjimky (např. nevyplněné položky formuláře). Princip je vysvětlen níže.

Detailní popis naleznete v dokumentaci k API.

Výjimky, chyby

Jazyk PHP standardně nevyužívá výjimek, proto framework pokrývá zpracování jak standardních chyb PHP, tak také výjimek.

Při inicializaci jádra jsou nastaveny obslužné funkce, které v případě, že chyba či výjimka nejsou aplikací ošetřeny, provedou výpis (případně trasování) a následný zápis do logovacího souboru (případně na obrazovku) – záleží na konfiguraci aplikace.

Výjimky jsou tedy generovány pouze samotným frameworkem. V zásadě rozeznáváme čtyři duhy:

class eException
Jde o základní typ výjimky. Slouží pouze pro zachycení výjimečných stavů v kódu a propagovaní této informace v hierarchii výše. Nemá tedy žádnou další vedlejší funkci.
class eUserException
Reprezentuje uživatelské výjimky, tedy výjimky, které slouží pro informování a ošetření stavů, které vyvolal uživatel svým chováním (např. Špatně zadané položky formuláře, nepovolená operace apod.). Oproti eException poskytuje další rozšíření (tzv. Self-catch, viz API). Pokud je využit self-catch, pak výjimka učiní následující:
class eSystemException
Slouží pro závažné výjimky, které nelze žádným způsobem oštřit (např. Databáze není dostupná a tedy by ani nemělo smysl využít možností eUserException).
class Exception
Rodičem všech tří zmiňovaných výjimek a zároveň reprezentuje i výjimky, které jsou definovány např. v balíku ADOdb.

Jak napsat vlastní knihovnu

Obecně

Volte výstižný název s ohledem na konvence psaní kódu (tj. První písmena slov velká, bez mezer, bez diakritiky). Název bude sloužit i jako identifikátor pro volání akcí.

Pro vytvoření knihovny stačí vytvořit adresář v /Lib.

Struktura knihovny

Předpokládá se adresářová struktura:

/Actions
Třídy implementující rozhraní iAction. Jde o samotné funkční realizace akcí, které je možné volat v kódu, šablonách a administraci.
/Classes
Třídy dané knihovny.
/Images
Veřejně přístupné obrázky.
/Lang
Jazykově závislé soubory (překlady, nápověda akcí atd.).
/Req
Veškeré skripty, které jsou vkládány pomocí require, include (konfigurace knihovny, soubor s sql dotazy, skripty třetích stran atd.)
/Scripts
Uživatelské skripty (typicky JavaScript).
/Styles
Styly knihovny.
/Templates
Šablony knihovny (pro administrační rozhraní i pro výslednou prezentaci - akce).

Nutné minimum

Pro běh knihoven nejsou kladeny žádné minimální požadavky. Vaše knihovna by měla být funkční i za předpokladu, že vytvoříte pouze jen to, co budete doopravdy potřebovat.

Konfigurace, SQL dotazy

Adresář /Req (jako Require). Při importu knihovny se děje následující:

Třídy

Adresář /Classes. Vzhledem k automatickému importu tříd (autoloading) je třeba striktně dodržovat konvence (tj. Název třídy a souboru se skládá z prefixuDelšíhoNázvu). Následující příklad vytváří instanci třídy:

$gLib->Import('Core'); // Nutné v případě, že není knihovna naimportována. Stačí uvést jednou pro celý skript.
$xPozadavek = new cHttpRequest();

Akce

Adresář /Actions.

Šablony

Adresář /Templates. Je možné využít všech možností, které přináší šablonovací systém Smary (resp. třída cSmarty).

Tato třída standardně zpřístupňuje všechny globální objekty. Dále nabízí metodu SetLibTemplateDir(NázevKnihovny), která nastavuje adresář šablon daného modulu. Následující příklad volá šablonu z adresáře /Lib/Core/Templates/Admin.tpl:

$xSmarty = new cSmarty();
$xSmarty->SetLibTemplateDir('Core');
$xSmarty->Fetch('Admin.tpl');

Jazykové soubory

Adresář /Lang. Zde je nutné:

Styly

Adresář /Styles. Zde budou zřejmě uloženy pouze styly, které jsou použitelné pro administrační rozhraní. Pro automatické připojení (použití) stylu v administraci je nutné vytvořit soubor Admin.css. Pokud budete chtít připojit další styly, můžete využít pravidla @import.

Obrázky, skripty

Adresáře /Images a /Scripts. Pro jejich použití v šablonách je vhodné využít jako prefix URL:

Administrační rozhraní

Pro zapojení knihovny do administračního rozhraní je nutné:

Tipy

Konvence

Projekt se řídí vlastními konvencemi, které je dobré dodržovat ;-)

copyright © 2007 Cms-It Project