Stručný úvod pro programátory
Michal Kuchta
Alespoň základní znalost PHP Základy klasického OOP a jeho implementaci v PHP Schopnost oprostit se od konvenčního tvoření stránek
NixFW - Stručný úvod pro programátory
2
Framework pro snazší vývoj aplikací v PHP Abstrakce databáze „Programový“ přístup k tvorbě webové aplikace Ověřování uživatelů SEO-friendly URL
NixFW - Stručný úvod pro programátory
3
PHP 5.2 a novější MySQL 5 a novější Apache s podporou mod_rewrite (nebo kompatibilní) (XAMPP?)
NixFW - Stručný úvod pro programátory
4
$ $ $ $ $
svn co http://svn.gcm.cz/nixfw/ cd nixfw rm –r .svn apps/.svn svn co
. vim .htaccess
Přepsat RewriteBase na root aplikace
$ cp apps/site-specific.config.php.dist specific.config.php Vytvořit MySQL databázi a naimportovat do ní soubor scripts/db/database.sql $ vim apps/site-specific.config.php
apps/site-
BasePath – stejná hodnota jako pro RewriteBase (bez
koncového /) Nastavení připojení k MySQL NixFW - Stručný úvod pro programátory
5
/ - adresář přístupný z webu, libovolný podadresář lze z webu odkazovat /scripts/ - NixFW, obvykle není nutno zasahovat pro vývoj aplikace /apps/ - dostupné moduly (aplikace) Pokud je aplikace samostatná (má vlastní SubWeb), je třeba ji navázat na globální routování. /apps/config.php – globální konfigurace /apps/site-specific.config.php – konfigurace specifická pro jeden konkrétní server – necommituje se do SVN!
NixFW - Stručný úvod pro programátory
6
Modul (aplikace) umístěna v podadresáři adresáře /apps/. Může obsahovat následující podadresáře: templates/ - šablony pro tuto aplikaci templates/design.php – výchozí šablona obsahující celou
strukturu webu ( … ). ▪ Na patřičném místě pro vložení obsahové části
classes/ - třídy – modely, controllery, collections,
formuláře, … ▪ Je dobrým zvykem rozdělovat třídy podle jejich typu do dalších podadresářů
locale/ - lokalizace pro tuto aplikaci NixFW - Stručný úvod pro programátory
7
Nová aplikace – založit adresář v apps/ Vytvořit podadresářovou strukturu (classes, templates) Začít tvořit controllery (v classes/controllers), navázat je správně na routing (lze použít autorouting) – v config.php Vytvořit modely pro data (v classes/models) Vytvořit šablony v adresáři templates Formuláře v classes/forms NixFW - Stručný úvod pro programátory
8
Způsob vývoje aplikací, kdy jsou data oddělena od jejich řízení a výsledné reprezentace uživateli Model – reprezentuje data View – frontend – prezentace dat uživateli Controller – provádí operace s modely a připravuje data pro View.
NixFW - Stručný úvod pro programátory
9
Model – reprezentace jedné datové entity (článek, kategorie, …), třída DbRow Collection – kolekce, sdružuje datové entity jednoho typu (pole DbRow), třída Collection Controller – provádí akce s modely a kolekcemi (spojuje backend a frontend), třída Page, … View – šablona – obsahuje HTML+PHP zobrazující data NixFW - Stručný úvod pro programátory
10
Potomci třídy DbRow class Article extends DbRow { … }
DbTree – stromová struktura v databázi class DbTree extends DbRow;
class ContentTree extends DbTree { … }
Automatická konfigurace Podle názvu třídy se pokusí získat seznam sloupců
z databáze a automaticky se tak nastavit Pokud to selže, ruční konfigurace pomocí properties objektu NixFW - Stručný úvod pro programátory
11
Získávání hodnot z databáze Konstruktor – $article = new Article(10); ▪ Pozor na typy – musí být int!!
throws SQLNoResultException
Modifikace hodnot $article->name = „Testovací článek“;
Uložení hodnot $article->Save($commit = true); podpora transakcí ▪ automatický commit, ale jde zakázat, viz parametr metody Save(). NixFW - Stručný úvod pro programátory
12
class Collection __construct($objectName) – kolekce objektů typu
objectName – musí být potomci DbRow. Nebo automatická detekce typu podle názvu kolekce ▪ $c = new ArticlesCollection() === $c = new Collection(„Article“);
$c->setOrder($column, $direction) $c->setLimit($from, $count) $c->setCondition($column, $match, $value) NixFW - Stručný úvod pro programátory
13
Iterace: foreach ($c as $article) { echo $article->name; } Stránkování: class Paging
$paging = new Paging($collection); ▪ O vše se postará, v šabloně je pak pouze třeba zobrazit stránkovací tlačítka NixFW - Stručný úvod pro programátory
14
Obecně potomek třídy RequestProcessor. Potomci třídy Page – vizuální reprezentace dat Potomci třídy ActionProcessor – akce, jejímž výsledkem není HTML stránka, ale jen nějaká akce v backendu (ActionLogin, …) Metody v controlleru – jednotlivé stránky function index() {
$this->Display(„articles/index.php“); } NixFW - Stručný úvod pro programátory
15
$this->Set($varname, $value) – nastavení hodnoty proměnné dostupné v šabloně $this->Redirect($path) – přesměrování místo zobrazení stránky Automatický rendering
Název šablony podle názvu metody a názvu
controlleru – Articles::View() => articles/view.php
Messages::Add(„Text“, Message::Success); zprávy o stavu pro uživatele Message::Success, Message::Information,
Message::Warning, Message::Error NixFW - Stručný úvod pro programátory
16
Šablony, ze kterých se sestavuje výsledná podoba dat pro uživatele. Nepoužívá se žádný šablonový systém – pouze čisté PHP Spouštěné v kontextu controlleru, jsou k dispozici všechny funkce a properties controlleru. Lokální proměnné nastavené voláním funkce Set() v controlleru. NixFW - Stručný úvod pro programátory
17
Převod URL na správné volání metody ve třídě Autorouting URL začíná /, parametry (:controller, :action, …) Např.: ▪ Vzor: /:controller/:action/* ▪ URL: /articles/view/10 ▪ Provede kód: $c = new ArticlesPage; $c->view(10); NixFW - Stručný úvod pro programátory
18
Globání konfigurace v apps/config.php, proměnná $web_config. Třída SubWeb – hierarchie routování (má vlastní web_config). $web_config[$url_vzor] = $akce $url_vzor – autorouting rule nebo regexp
$akce – název třídy nebo pole obsahující výchozí
hodnoty parametrů (controller, action, …) NixFW - Stručný úvod pro programátory
19
Usnadnění a zpřehlednění šablon class HTMLHelper extends Helper { … } Automaticky dostupní v šablonách (HTMLHelper jako $html, NumberHelper jako $number, …) $html->url() – zpětné generování URL podle nastavení $web_config. echo $html->url(array(„controller“ => „articles“,
„action“ => „view“, 10)); NixFW - Stručný úvod pro programátory
20
Třída User – reprezentace jednoho uživatele $user->hasPriv(„název práva“) – true/false singleton class CurrentUser – aktuálně přihlášený uživatel CurrentUser::isLoggedIn() CurrentUser::i() – class User
Skupiny uživatelů – dědění oprávnění Anonymní < Přihlášení < Skupina < Uživatel NixFW - Stručný úvod pro programátory
21
Uživatel může být ve více skupinách Pokud alespoň jedna ze skupin má právo, uživatel
má právo. Nelze říct: Členové skupiny Administrators mohou vše Avšak administrátoři, kteří jsou zároveň členy skupiny BannedUsers nemohou editovat články. V takovémto případě se musí editace článků zakázat každému uživateli zvlášť. NixFW - Stručný úvod pro programátory
22
Permanentní vlastnosti uživatele $user->getProp($name); $user->setProp($name, $value);
NixFW - Stručný úvod pro programátory
23
Uložení hodnot platných pro jednu uživatelskou návštěvu stránky Session::Get($name);
Session::Set($name, $value);
NixFW - Stručný úvod pro programátory
24
Podpora lokalizace statických textů t($string, [$quantity]) ▪ z aktuálně platné domény - set_domain($domain)
d($domain, $string, [$quantity]) ▪ z explicitně určené domény s($string, [$quantity]) ▪ hledá překlad ve všech doménách
Umístění v locale//<domain>.php Definice jazyka v locale/.php NixFW - Stručný úvod pro programátory
25
Formuláře se programují podobně jako GUI v C#, Javě, Pythonu, … class ArticleAddForm extends Form { … } Metoda CreateControls() – vytvoření formulářových políček $this->InsertControl(new TextInput(„Název“, „name“,
„výchozí hodnota“));
Metoda Initialized()
$this->name = „Přidat článek“; $this->submitValue = „Přidat“; $this->callback = „AddArticle“; NixFW - Stručný úvod pro programátory
26
Callback metoda (AddArticle) function AddArticle() {
$article = new Article(); $article->name = $this->GetControl(„name“)->value; $article->Save(); Messages::Add(„Článek byl úspěšně vytvořen.“, Message::Information); }
Pokud callback metoda není specifikována, zavolá se zpět controller s nastavenou proměnnou $this->form. Použití ve view: $a = new ArticleAddForm(); $a->Show(); $a->Free();
NixFW - Stručný úvod pro programátory
27
Otázky? Jabber, email: [email protected] ICQ: 61766147 Doxygen: http://home.gcm.cz:10080/nixfw_doc/ + Cheatsheet
NixFW - Stručný úvod pro programátory
28