PHP a frameworky
Pro úspěšný programovací jazyk PHP dnes existuje více rozvinutých frameworků, tj. podpůrných aplikací usnadňující vývoj vlastních aplikací nebo jen abstrahující přístup k různým databázovým řešením (database abstraction layer). Dva úspěšní zástupci - databázová vrstva NotORM a Nette Framework – pocházejí od předních českých PHP programátorů. Tyto produkty jsou zajímavé open source licencí, pokročilým vývojem využívajícím poslední verzi PHP 5.3, rozšiřujícím se programátorským zázemím a v důsledku zvyšující se použitelností.
Níže uvedený text je k dispozici i v PDF formátu (171 kB).
Databázové frameworky
NotORM (Jakub Vrána, http://www.notorm.com/)
- umí pracovat se všemi databázemi, které podporuje PDO, testovaná je s MySQL, SQLite, PostgreSQL a MS SQL.
- z tabulek se přenáší jen ty sloupce, které se nakonec použijí, aniž by se jejich seznam musel kdekoliv specifikovat
- vyžaduje konvenci v pojmenování sloupců – primární klíč je id, cizí klíč table_id, kde table je název odkazované tabulky
- starší verze implementována v Nette frameworku
Výhody oproti Doctrine 2:
- rychlá a snadná instalace (Doctrine 2 tvoří 333 souborů; je potřeba specifikovat adresář a jmenný prostor pro proxy; )
- příjemná syntaxe (Doctrine 2 pro operace typu setřídění požaduje konstrukce v jazyku DQL)
- vyšší rychlost (Doctrine 2 pokládá dotaz při každém průchodu cyklem)
- nezávislost (část Doctrine 2 záleží na frameworku Symfony, což ale nemusí být vždy nevýhoda)
- flexibilita (v případě, kdy se rozhodneme do vazební tabulky přidat sloupec s nějakou informací: v Doctrine 2 to znamená zahodit velkou část kódu a ještě více kódu napsat úplně od začátku)
Příklad:
<?php
include "NotORM.php";
$pdo = new PDO("mysql:dbname=shop");
$shop = new NotORM($pdo, null, new NotORM_Cache_Database($pdo));
$category = $shop->category[$_GET["id"]];
if (!$category) {
// 404
exit;
}
echo "<h1>" . htmlspecialchars($category["name"]) . "</h1>n";
$products = $category->product()
->where("disabled", 0)
->order("price")
->limit(10);
...
Aplikační frameworky
Nette (David Grudl, http://www.nette.org)
- Zabezpečení formulářů - používá technologii, která eliminuje výskyt bezpečnostních děr a jejich zneužití, jako je např. XSS, CSRF, session hijacking, session fixation atd.
- Disponuje ladícími nástroji, které vám pomohou zavčasu odhalit všechny chyby aplikace.
- Aktivní komunita v ČR: http://nette.org/cs/komunita
- Moderní Framework - AJAX / AJAJ, SEO, DRY, KISS, MVC, Web 2.0, cool URL – propracovaná podpora všech moderních technologií a koncepcí.
- Vyzrálý objektový návrh - využívající vlastností PHP 5, komponent a událostmi řízeného modelování.
- Pluginy a rozšíření - nabídka doplňků pro snadné použití ve vašich aplikacích - http://addons.nette.org/cs/
- Open-source licence - framework můžete zdarma používat i v komerčních projektech.
- Rozděluje práci mezi více programátorů a HTML kodérů – šablonovací sytém Latte
- Lze výhodně kombinovat například se Zend Frameworkem.
- Obsahuje databázové frameworky (layery) NotORM a Dibi, elegantního databázového správce Adminer (http://www.adminer.org/)
Výhody oproti Symfony:
- snadná instalace, kompaktnost, odpadá nutnost používat CLI skripty
- racionální implementace MVP (MVC) modelu
- dokumentace v češtině (oproti pův. francouzské dokumentaci symfony!)
Výhody oproti Zend Frameworku:
- možnost napojit jako minified php soubor
- syntaxe využívající PHP namespaces je zkratkovitá ale zároveň intuitivní
Hlavní nevýhody Nette oproti 2 uv. výše:
- nesrovnatelně menší uživatelská základna
- pomalý vývoj , děravá dokumentace
- neexistuje plnohodnotná podpora, záruka budoucího vývoje
- omezená a stále mnohdy nefunkční knowledge base
Příklad: Skeleton
app/ models/ presenters/ templates/ .htaccess bootstrap.php document_root/ images/ .htaccess index.php |
Zjednodušená struktura dle J. Vrány: models/ |
Příklad: šablony
<ul n:if="$items">
{foreach $items as $item}
<li id="item-{$iterator->counter}">{$item|capitalize}</li>
{/foreach}
</ul>
MVP:
Odkazy, zdroje
Programátorská klávesnice a další utility: http://jakub.vrana.cz/utility/
NotORM v Nette: http://php.vrana.cz/notorm-v-nette.php, http://php.vrana.cz/kompaktni-skeleton-nette.php
Hodnocení Nette: http://php.vrana.cz/unikatni-vlastnosti-nette.php
Api Nette: http://api.nette.org/
Ukázky: http://pla.nette.org/
Videa o Nette: http://wiki.nette.org/cs/videa
8.11.2011