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

Zdroják » PHP » Zend framework: základné súbory a komponenty

Zend framework: základné súbory a komponenty

Články PHP, Různé

Zaujíma vás, na čo slúži a index.php a Bootstrap.php? Chcete vedieť, čo je modul? Ako vám zjednoduší orientáciu vo vašej aplikácii? Aké sú základne komponenty Zend frameworku? Všetko toto sa dozviete v treťom dieli nášho seriálu.

index.php

Súbor index.php by mal byť jediným spustiteľným súborom vo vašom projekte. Nachádza sa v adresári public/. Front controller zabezpečuje, že všetky požiadavky na webový server budú spracované pomocou tohto súboru. Index.php tiež zabezpečuje jeho konfiguráciu, ale tak isto aj konfiguráciu PHP prostredia.

// Define path to application directory
define('APPLICATION_PATH',
realpath(dirname(__FILE__) . '/../application'));

// Define application environment
define('APPLICATION_ENV',
(getenv('APPLICATION_ENV') ?getenv('APPLICATION_ENV')
                                         : 'production'));

/** Zend_Application */
require_once'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
            ->run();

Výpis: Vzorový súbor index.php

Riadok  APPLICATION_PATH nastaví konštantu s cestou k aplikácii a APPLICATION_ENV nastaví konštantu názov serveru. Nakoniec je načítaný súbor s komponentom Zend_Application, je vytvorená inštancia triedy a sú zavolané metódy bootstrap() a run(). Starajú sa o zavedenie aplikácie a odštartovanie front controlleru. Konštruktoru triedy sú poslane cesta ku konfiguračnému súboru a definované PHP prostredie. 

Bootstrap.php

Od verzie 1.8 a s príchodom Zend_Application sa spôsob konfigurácie zjednodušil a štandardizoval. Bootstrap.php slúži na konfiguráciu Zend Frameworku. Nájdete ho v adresári application/

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

}

Výpis: Vzorový súbor Bootstrap.php

Celá konfigurácia sa presunula do konfiguračného súboru application.ini v adresári application/config.

[production]

phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0

[staging:production]

[testing:production]

phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development:production]

phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1 resources.frontController.params.displayExceptions = 1

Výpis: Vzorový súbor application.ini

Zend_application zabezpečuje flexibilný spôsob zavádzania. V súbore application/Bootstrap.php môžete vytvoriť triedu, ktorá bude obsahovať inicializačné metódy. V praxi sa najčastejšie používa kombinácia inicializácia aj pomocou index.php aj pomocou Bootstrap.php.

Čo všetko je možné nastaviť v application.ini, index.php a Bootstrap.php sa postupne dozviete v ďalších častiach seriálu. 

Zend_Application

Komponenta Zend_Application štandardizuje proces zavádzania aplikácie pre znovu použiteľné zdroje, ako sú modulovo závisle Bootstrap triedy, a kontroluje ich závislosť alebo databázové adaptéry. Taktiež zabezpečuje nastavenie PHP prostredia a automatické nahrávanie tried.

Zend_Registry

Často v aplikácii existujú objekty, ku ktorým potrebujete pristupovať. Môže to byť objekt s nejakými údajmi, ku ktorým chcete pristupovať v radiči, pohľade ale aj v modele. Taktiež to môžu byť objekty obsahujúce preklad textu. Často sa tento problém rieši tým, že sú tieto objekty uložené do globálnych premenných. V Zend frameworku je toto možne riešiť pomocou komponenty Zend_Registry

Poskytuje vám registráciu objektu a k objektom, ktoré ste si uložili, môžete pristupovať z ľubovoľnej časti svojej aplikácie po celý čas jej behu.

$objekt = “text, string alebo pole”;
Zend_Registry::set(‘premena’,$objekt);
$hodnota = Zend_Registry::get (‘premena’);
echo $hodnota;

V prípade potreby je možní register vyčistiť. Dochádza k odstráneniu objektov, preto treba túto metódu použivať opatrne: 

Zend_Registry::_unsetInstance();

Zend_Log

Komponent Zend_Log slúži k zaznamenávaniu udalosti. Poskytuje možnosť zaznamenávanie do súboru, do databázy, ale aj posielanie emailov. Udalosti, ktoré chcete zaznamenať, majú 8 typov priorít. 

úrovne logovania popis
DEBUG Hlásenia o ladení
INFO Infromativné hlásenie
NOTICE Hlásenie
WARNING Upozornenie
ERR Chybové hlásenia
CRIT Kritické chybové hlasenia
ALERT Upozorňovacie hlásenie
EMERG Núdzové chybové hlasenie

Tabulka1: Podporované úrovne logovania v Zend_Log

Zapisovač Popis
Zend_Log_Writer_Stream Zapíše záznam do súboru, URLs …
Zend_Log_Writer_Db Zapíše záznam do databazy
Zend_Log_Writer_Firebug Zapíše záznam do Firebug konzoly
Zend_Log_Writer_Mail Zapíše záznam do emailu
Zend_Log_Writer_Mock Výsledok záznamu pošle sám seba aby sa dal použiť na testovacie účely
Zend_Log_Writer_Null Zapíše záznam do  /dev/null
Zend_Log_Writer_Syslog Zapíše záznam do systemového logu (syslogd na UNIX a event viewer na Windows)

Tabulka2: Možnosti zapisovania záznamu v Zend_Logu

Najpoužívanejšia možnosť je  použitie jednoduchých logovacích súborov.

$logger = new Zend_Log();    
$writer = new Zend_Log_Writer_Stream(APPLICATION_PATH . '/../data/logs/example.log');
$logger->addWriter($writer);
$format = '%timestamp%: %priorityName%: %message%' . PHP_EOL;
$formatter = new Zend_Log_Formatter_Simple($format);
$writer->setFormatter($formatter);
$logger->log('Upozornenie', Zend_Log::ALERT);

Na začiatku je inicializovaný Zend_Log objekt. Po inicializácii nasleduje pridanie zapisovača, ktorý má v tomto príklade zapisovať do súboru (ostatné zapisovače vid tabuľka 2). Je možné vybrať aj viacej zapisovačov a zapisovať do databázy a súboru súčasne. 

Moduly

Stránka, ktorú vytvárate, sa môže skladať z viacerých celkov, napríklad fórum, blog, e-shop. Pre každú túto časť stránky potrebujete vlastné radiče, modely, pohľady, ale aj konfiguračné súbory. Môžete použiť aj základnú adresárovú štruktúru, ale veľmi rýchlo by ste sa v súboroch mohli stratiť. Aby ste si v súboroch zachovali väčší prehľad,  Zend Framework  vám poskytuje možnosť vytvoriť si moduly. Toto je nejaká skupina radičov, modelov a pohľadov, ktoré spolu súvisia. Pre každý modul si v adresári  application/modules vytvoríte svoj adresár (štandardne v application sa modules nenachádza, treba vytvoriť aj ten).  Do tohto adresára vytvoríte štruktúru známu z adresára application. 

V ďalšej časti seriálu si budete môcť prečítať o Radiči a o komponentoch, ktoré slúžia na prácu s ním. 

Komentáře

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

Proč má unsetInstance podtržítko? Nemají mít podtržítko jen privátní a protected metody?

https://tomasfejfar.mojeid.cz/#bLGPpVT97A

Ano, takový je CS, ale z neznámého důvodu tam podtržítko skutečně je. Původním smyslem bylo asi naznačit, že je to metoda, která by se „neměla používat“. Používá se prakticky pouze pro unit testy, aby se zrezetovala statická proměnná v Zend_Registry.

https://techi.mojeid.cz/#PL2P791SLx

Ano, autor článku si skutečně dal práci a našel jednu z mála metod v Zend Frameworku, která má podtržítko (tedy je podle konvencí private), ale ve skutečnosti je public. Je to z toho důvodu, že se volá v testech. V aplikaci byste ji opravdu volat neměli a pokud vím, tak jsem jí za 5 let používání ZF nepotřeboval ani jednou…

5o

Do článku by som pridal upozornenie, že používanie Zend_Registry je bad OOP practice.

Jan Marek

Navíc to má znamenitou, funkčně zcela ekvivalentní, alternativu přímo v PHP. Jmenuje se $_GLOBAL.

Astapov

No predovsetky je to $GLOBALS
a naviac pouzitie tohto sposobu je urcite x-krat rychlejsie ako cez Registry…

Eda

Díky za tuto sérii článků. Alespoň mám možnost porovnat, jak je Zend oproti Nette hrozný :-)

luki

V prvom rade sa jedna o ZF1. Myslim, ze keby si porovnal voci ZF2 tak by si nieco take netvrdil.

Michal

To je pravda, 2ka totiz kopci od sf2 :-)

https://tomasfejfar.mojeid.cz/#bLGPpVT97A

Začínám mít pocit, že Peter Grezo je pseudonym Davida Grudla, protože aby někdo psal a záměrně vytahoval ty nejhorší věci z celého frameworku, to snad ani možné.

Vážně? Ovšem David neumí slovensky, což je snad dostatečný důkaz, že to nepíše on. A navíc sehnat toho překladatele do slovenčiny dalo pěknou fušku 8-)

https://tomasfejfar.mojeid.cz/#bLGPpVT97A

You don’t know the power of the dark side! ;)

https://tomasfejfar.mojeid.cz/#bLGPpVT97A

Nedalo mi to a sepsal jsem doplňující blogpost obsahující některé věci, které jsem považoval za důležité a které podle mého názoru v článku chyběly nebo naopak neměli co dělat.

http://blog.tomasfejfar.cz/?p=120

Filip Procházka

Já především nechápu, proč píšete o jedničce, když vychází dvojka. Autor se rozhodl sepsat svoje paměti?

Martin Hassman

Už jsme to tu probírali pod předchozími díly. Stručně. Dvojka se na poslední chvíli ještě dost měnila a rádi o ní pak navážeme třeba dalším seriálem, pokud se najde schopný autor. A jednička tu rozhodně nějaký čas bude, viz všechny ty weby, co ji používají.

Jiří Kosek

Hlavně nechápu, proč vlastně zdroják píše o PHP. Už více jak deset let je jasné, že to je hrozný a zastaralý jazyk, který nahradí novější, výkonější a elegantnější technologie.

Martin Hassman

Tak to víme všichni, že je to mrtvá technologie 8-) Ale občas nějaký článek na to téma vydáme, aby čtenáři nebyli moc smutní.

Jirka

A na co se teda zaměřit, když ne PHP – Ruby, Python nebo jen HTML5?

Martin Hassman

Mohli bychom to rozšířit i dál. Třeba o Javu a .NET. Začal bych zvažováním, co vlastně chcete. Zkoumáním, v čem jsou napsané projekty, které vás něčím inspirují. Jaký jazyk (a hlavně ekosystém okolo něj) vám nejvíc sedne? Třeba se tak cesta pak ukáže sama.

a

Jako PHPčkař jsem si střihl webovou aplikaci v kombinaci Spring (MVC, data)+JSP a nenabyl jsem pocit, že jsou až o tolik dále.

Ano, Java je vyzrálejší jazyk než zpatlané PHP. Má lepší podporu v IDE. Ale hromada věcí se mi daleko snáze dělala ve starém ZendF nebo Nette2.

https://podhy.mojeid.cz/#z3IbuSxgLi

sice s tím plně souhlasím, ale je zvláštní, že za těch 10 let se žádná taková technologie ještě nenašla :-) holt budu čekat dál a zatím bastlit v PHP :-)

povinná

Takže Zendu se jen tak nezbavíme? To jsou teda vyhlídky…

Paja

Myslim ze michate dva pojmy. Jazyk a technologie.
Pokud se nekdo rozhodne ze v PHP bude delat frameworky, tak jsou urcite lepsi napady. I kdyz dnes, treba frameworky v javascriptu :-)
Nicmene pokud pouzijete PHP jako zobrazovaci (sablonovaci) vrstvu, tak to funguje.

Mne se na PHP libi, jak se jednoduse pracuje s asociativnimi poli. To algoritmy elegantne zkrati.

Jinak ja jeste pamatuju PHP3 ktery se narodil nekdy na konci roku 98. A rozhodne si nemyslim, ze vice nez 10 let (tj. pred rokem 2002, a pokud vice chapu jako vyznamne vice tak pred rokem 1997) si nekdo myslel, ze je PHP hrozny a zastaraly jazyk. Spis bych rekl, ze do verze 3 (1998) o nem nikdo moc nevedel.

Martin Hassman

1998 – to plně souhlasí, Jirkova slavná knížka o PHP, která to změnila, totiž vyšla v roce 1999. 8-)

Michal

Jo z ty jsem se to naucil :-)

Porovnání

…Mne se na PHP libi, jak se jednoduse pracuje s asociativnimi pol…
V porovnání s čím?

5o

Keď poznáte novšie a lepšie technológie ako PHP, tak by ste mohli napísať o tom článok alebo aspoň odkázať. Navyše nemôžem súhlasiť. Z praktického hľadiska je PHP veľmi podarený jazyk, a vývoj nezastal.

Martin Hassman

Jirka přece už roky programuje weby v XSLT 8-))

Přezdívka

„Keď poznáte novšie a lepšie technológie ako PHP, tak by ste mohli napísať o tom článok alebo aspoň odkázať.“
myslis nove a lepsie technologie na vyrobu webov spokojne fungujucich na zdielanom hostingu dynamicky generujucich stranky z db? nie niesu, PHP je skutocne najlepsie. ale na vsetko ostatne existuje kvantum lepsich technologii.

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.