Přejít k navigační liště

Zdroják » PHP » Limonade: miniaturní PHP framework

Limonade: miniaturní PHP framework

Články PHP, Různé

Vývojáři, kteří pracují v PHP, jistě důvěrně znají nejrůznější knihovny a frameworky, od obřích souborů knihoven, jako jsou PEAR či Zend Framework, až k malým kompaktním frameworkům typu Nette. Ale dokážete si představit framework, který má pouhých 68kB? V dnešním článku si jeden takový představíme.

 Přiznejme si to hned na úvod: Každý programátor v PHP si napsal vlastní framework, a kdo říká že ne, tak si ho píše dodneška! Přijít s novým frameworkem je na úrovni přinesení nové sovy do Athén a šance, že mu někdo bude věnovat pozornost, se limitně blíží nule. Nový framework musí být opravdu výjimečně užitečný nebo extravagantně neobvyklý, aby si ho někdo všiml. Limonade rozhodně splňuje předpoklad neobvyklosti: Skládá se ze sedmi souborů o celkové velikosti 68 kB (včetně komentářů v kódu. Bez nich je to pouhých 38 kB!).

Limonade je mikroframework inspirovaný frameworky typu Orbit v jazyce Lua či Sinatra nebo Camping v jazyce Ruby. Na rozdíl od velkých frameworků, jako je známý Zend Framework, nenabízí desítky objektových knihoven pro všechny možné operace. Neřeší připojení k databázi, neřeší správu session, přihlašování uživatelů ani například cachování dat. Dokonce není ani objektový. Přesto nabízí poměrně zajímavé funkce. Posuďte sami:

Routování

Každý PHP framework by měl umět rozebrat požadavek uživatele a podle něj provést určité akce. Limonade samo sebou tuto funkčnost nabízí, a to poměrně silnou. V základní podobě vypadá například takto:

dispatch('/', 'moje_get_funkce');
function moje_get_funkce()
  {
    // Něco udělej
  }

Volání dispatch() je zkrácený alias pro volání funkce dispatch_get(), tedy je jasné, co výše zmíněný kód udělá: Obslouží požadavek „GET /“. Analogicky můžeme obsloužit POST požadavek: dispatch_post('/', 'moje_post_funkce'). Limonade umožňuje navíc obsloužit i požadavky UPDATE a DELETE, čímž velmi usnadňuje vytváření služeb s API typu REST. Navíc v případech, kdy nelze určit požadavek DELETE nebo UPDATE (v HTML formulářích), lze použít metodu POST a požadovanou operaci předat v parametru _method.

Routování je v Limonade poměrně komplexní. Můžeme použít pojmenované parametry v cestě:

dispatch('/pozdrav/:jmeno', 'pozdrav');
    function  pozdrav()
    {
        $jmeno = params('jmeno');
        return 'Ahoj $jmeno';
    }

Můžeme stejně tak použít i hvězdičky (wildcards), můžeme tyto wildcards pojmenovat či rovnou namísto vzorku použít regulární výraz:

dispatch(array('/zavolej/*/na/**', array("co", "koho")), 'volej');
    function volej()
    {
        # Odpovida napr. /zavolej/ahoj/na/karla
        $co   = params('co');
        $koho = params('koho');
    }

dispatch('^/muj/vlastni/(d+)/regexp', 'funkce');
    function funkce()
    {
        # Odpovida /muj/vlastni/12/regexp
        $num = params(0);
    }

Limonade obsahuje i reverzní funkci, která z cesty a parametrů vytvoří URL. Hodí se zejména ve spojení s funkcí  redirect().

Šablony a pohledy

Přes svou velikost nabízí Limonade i podporu pro práci s pohledy, šablonami a vzhledy. Jako šablonový engine je použit (nepřekvapivě) samotný jazyk PHP.

Šablony pohledů (views) jsou uloženy v adresáři views (lze změnit příslušnou volbou) a konvence frameworku velí pojmenovávat je např. post.html.php. Ve skriptu jsou nejprve nastaveny parametry pro šablony funkcí set(), např. takto: set('jmeno', 'Pepa Zdepa'); K získání výsledku z pohledu slouží funkce render(), které je jako parametr předáno jméno pohledu –  render('stranka.html.php').

Vzhledy (layouty)

Výsledky pohledů mohou být vloženy do jiných šablon – vzhledů (layouts). Použitý vzhled je předán jako druhý parametr funkce render() nebo nastaven funkcí  layout().

Výsledky mohou být vypsány přímo z funkce render(), ale Limonade obsahuje některé pomocné funkce. Místo render() můžete použít například funkci html(), která přidá patřičné informace o MIME typu a o kódování. Podobné jsou funkce xml(), css(), txt() či json(). Pokud je třeba poslat přímo obsah souboru jako binární data, použijeme render_file()  – postará se za nás o zjištění správného typu z přípony a pošle správnou hlavičku.

Další funkce

Limonade máme k dispozici další funkce pro zjednodušení práce – lze tak například definovat, co se má stát před zpracováním požadavku (funkce before()) či zpracovat připravený výstup (funkce after()). Snadné je též nastavení konfigurace, k čemuž slouží funkce configure(). Funkcí option() lze nastavovat nejrůznější volby a ovlivňovat tak chování frameworku, měnit přednastavené cesty či nastavovat běhové konstanty.

Poměrně bohatý repertoár funkcí nabízí Limonade pro ošetřování chybových stavů.  Funkce halt() způsobí ukončení skriptu a vypsání ladicího výpisu. Funkci můžeme předat konstantu NOT_FOUND nebo SERVER_ERROR – framework s těmito chybami naloží tak, že vrátí odpovídající HTTP kód (404 nebo 500).

Zpracování chyb lze samozřejmě uživatelsky ošetřit a napsat si vlastní chybové handlery.

Chcete se naučit o PHP víc?

Akademie Root.cz pořádá školení Úvod do PHP. Kurz je určen všem současným a budoucím webovým vývojářům, kteří se chtějí od základu seznámit s programovacím jazykem PHP. Během kurzu se účastníci naučí vytvářet webové aplikace v PHP od těch nejjednodušších až po ty poměrně složité a seznámí se se všemi klíčovými vlastnostmi jazyka. Máte zájem o jiné školení? Napište nám!

Limonáda pro váš web?

Limonade je opravdu jednoduchý framework, jehož největší výhodou bude pravděpodobně jeho velikost (přesněji spíš nepatrnost). Své použití asi nenajde ve větších projektech, na nichž se podílí víc autorů, natož v high endu. Puristé mu jistě vytknou spoustu věcí, například jeho neobjektovost. Lidé, zvyklí na komfort velkých frameworků, jej mohou považovat za zbytečný, protože řeší samozřejmé věci.

Přesto své místo má: V malých webech, v pětiskriptových službičkách, kde se nevyplatí sahat po větším frameworku. V projektech na jedno odpoledne. Zkrátka všude tam, kde nespočívá těžiště v práci s obrovským množstvím dat nad velkou databází, ale kde se hodí mít k dispozici jednoduchou MVC kostru. V takových případech může ušetřit spoustu práce – minimálně tím, že vnese do vaší práce řád. A i když jej nepoužijete, můžete v něm nalézt inspiraci.

Další informace naleznete na těchto stránkách:

Limonade je šířen pod licencí MIT.

Komentáře

Subscribe
Upozornit na
guest
12 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
Mastodont

… Volání dispatch() je zkrácený alias pro volání funkce
dispatch_get() …

A dispatch_get() je alias pro volání route(„GET“ …).
function dispatch($pat­h_or_array, $function, $agent_regexp = null) {

dispatch_get($pat­h_or_array, $function, $agent_regexp);
}

function dispatch_get($pat­h_or_array, $function, $agent_regexp = null) {

route(„GET“, $path_or_array, $function, $agent_regexp);
}

Nevím jak kdo, ale já funkce s jednořádkovými aliasy prostě
nemám rád.

Warning: explicit content

Tvuj PHP framework mi vyplouva koncovou casti traviciho traktu

question

what are you on about?

maros

Nerozumiem potrebe komentovat clanky tymto spobobom… Ak vam to nic nedava,
jednoducho chodte na web, ktory je pre vas prinosnejsi. Niekto si dal pracu
framework otestovat a napisat o tom clanok, vy ste dokazali co?

_

Ja navrhuji a implementuji kvalitni profesionalni software kazdy den. Nemusim
se tim chlubit na rootu ani jinde, ale znam nekolik plne objektovych frameworku
pro nekolik ruznych jazyku, z nichz nektere prilezitostne uziji a jine si sam
postupne utvarim dle potreby. Limonade je chybna koncepce doprovazena
neodpovidajici implementaci vzhledem k moznostem jazyka a typickemu uplatneni
kvalitnich reseni. Tak spatny kod nemuzete beztrestne vystavovat a cekat za nej
chvalu.

Jiří Knesl

Pokud denně vyvíjíte profesionální software – pokud je navíc
rozsáhlejší – miniframework není pro Vás. Nejste jeho cílovka a proto
jeho použitím nic nezískáte. Nekdo jiný s odlišnými potřebami ano.

„objektovych frameworku … jine si sam postupne utvarim podle
potreby“ – to me dost vydesilo. Framework nejde postavit jen tak na zelené
louce a už vůbec ne postupně si utvářet X frameworků naráz. To budou
pravděpodobně ještě mnohem horší bastly, než co zde kritizujete.

„Limonade je chybna koncepce doprovazena neodpovidajici implementaci
vzhledem k moznostem jazyka a typickemu uplatneni kvalitnich reseni.“ –
jako bych četl Dilberta. :)

Tato věta znamená, že jste viděl zdrojáky Limonade a jsou špatně
napsané, nebo kritizujete, že limonade nevyužívá všech
možností PHP?

oxxi

Ja pracujem vo velkej firme na projektoch, ktore nemaju malu navstevnost.
Pouzivame klasicke frameworky, dokonca sa v nasej firme pracuje na vlastnom php
frameworku. Mne osobne sa Limonade paci, pretoze je nezmysel sypat na malicky
web s par statickymi strankami kvoli jednoduchemu kodeniu framework, ktory
zabera niekolko MB. Niekto asi skratka nepochopil to, co autor v clanku jasne
napisal… Podme sa teraz bit do prs, aki sme perfektni a ake super
veci robime

lzap

Pěkný framework, podobná analogie v Javě je například Stripes
Framework (ten už je samozřejmě objektový). V poslední době rostou tyto
mini-frameworky jako houby po dešti, což je dobře. Pro malé projekty
ideální.

Jinak objektově se v PHP (ale i např. Perlu) programuje dost nešikovně
z pohledu syntaxe. Objektovost není všechno, jak ostatně dokazuje Drupal,
že ano.

lzap

Pěkný framework, podobná analogie v Javě je například Stripes
Framework (ten už je samozřejmě objektový). V poslední době rostou tyto
mini-frameworky jako houby po dešti, což je dobře. Pro malé projekty
ideální.

Jinak objektově se v PHP (ale i např. Perlu) programuje dost nešikovně
z pohledu syntaxe. Objektovost není všechno, jak ostatně dokazuje Drupal,
že ano.

Martin Kopta

Když se Limonade objevila, udělalo mi to velkou radost, protože vzhledem
k tomu, že přináší myšlenky Sinatry do prostředí PHP, má pro mě
velké uplatnění.

Nejsem programátor a neprogramuji náročné systémy, a nevyužiju
komplexní framework. Myslím, že podobné počiny přispívají k
„demokratizaci“ programování podobně jako třeba Blogger k demokratizaci
médií nebo Webnode k demokratizaci webdesignu, videokamera k demokratizaci
filmové produkce, digitální foťák k…

Což ovšem neznamená, že by tím profi programování mělo nějak
utrpět. Používejte dál, co potřebujete a zvládnete, ne? Nikdo vás nenutí
natáčet celovečeráky kamerou v mobilu. ;-)

oxxi

Uplne suhlasim. Som za jednoduche riesenia. Pri programovani treba pouzivat
hlavu. Clovek by povedal, ze zo SEO konzultanta clovek nedostane nieco rozumne
(jokin‘)

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.