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

Zdroják » PHP » Zend Framework: Hello world

Zend Framework: Hello world

Články PHP, Různé

V druhej časti seriálu sa dozviete, čo je to MVC architektúra. Ake sú hlavné priečinky projektu vytvoreného v Zend frameworku. Vyskúšajte si vypísať text hello world.

Komponenty Zend Frameworku (ZF) používajú veľa návrhových vzorov. Ich výhodou je, že zjednodušujú komunikáciu medzi vývojármi. Návrhový vzor je určitý postup na riešenie problému, ktorý sa pravidelne vyskytuje pri vývoji aplikácií. Jeden z najpoužívanejšich v Zend Frameworku, ale aj ďalších frameworkoch, je MVC architektúra.

MVC architektúra

MVC (Model View Controller) architektúra je základom moderných frameworkov určených pre webové aplikácie. Ide o rozdelenie aplikácie do troch čiastkových komponent: údaje (Model), zobrazenie (View) a riadenie (Controller). Každá z týchto komponent sa stará o určitú časť aplikácie.

Na obrázku vidíte priebeh požiadavky v MVC architektúre. HTTP požiadavka je poslaná na server. Prijme ju radič a ďalej spracuje. Z požiadavky radič zistí, ktorý model má byť oslovený a požaduje od neho údaje (1). Niekedy pošle radič modelu údaje získané od užívateľa a požaduje ich uloženie. V tomto prípade dostane radič od modelu odpoveď o úspechu alebo zlyhaní operácie. (2). Radič odošle údaje správnemu pohľadu, ktorý zabezpečí výpis (3). V niektorých implementáciach sa môže stať, že pohľad požaduje údaje od modelu, resp. model informuje pohľad o zmene údajov (4). Nakoniec vytvorí pohľad výpis údajov a radič ho pošle naspäť prehliadaču.

Priečinky v projekte ZF

Veľkou výhodou ZF je jeho flexibilita aj pri ukladaní súborov. Bolo by možné súbory ukladať do jedného priečinka, ale určite je lepšie udržiavať medzi nimi prehľad a radiť ich do priečinkov. Autori ZF doporučujú štruktúru, ktorej sa je dobre držať.

application – Priečinok je jadrom aplikácie. Obsahuje priečinky pre konfiguráciu (config), radiče (controllers), formuláre, modely (models) , moduly, layout, pohľady (views) a aj súbor Bootstrap.php (o tom sa dozviete viac v ďalšej časti)

library – V tomto priečinku sa nachádzajú súbory ZF, ale je určený aj pre vlastné rozšírenia.

public – Obsahuje súbory, ktoré sa majú byť verejné dostupne cez webový prehliadač, teda CSS, JavaScript súbory, ale aj  index.php

Hello World

Spomenutú MVC architektúru si precvičíte na jednoduchom príklade, ktorý má za úlohu vypísať Hello world.

Radič

Zend_Controller_Action zodpovedá za vykonávanie všetkých akcií v Zend Framework aplikáciach. Každý action controller obsahuje jednu alebo viacej metód akcií, v ktorých prebieha komunikácia s modelom a pohľadom. V rámci jedného action controlleru môžete vytvoriť ľubovoľný počet akcií.

Trieda controlleru v ZF musí byť pomenovaná nasledovné: MenokontroleraController.Všimnite si, že meno controllera začína veľkým pismenom Menokontrolera. Táto trieda musí byť uložena v súbore MenokontroleraController.php. 

Vytvorte controller pre Helloworld. aplicationcontrollerHelloworldController.php.

<?php

class HelloworldController extends Zend_Controller_Action
{

    public function init()
    {
        /* Initialize action controller here */
    }

    public function indexAction()
    {
        // action body
    }


}

Pre Action, ktoré sa nachádzajú vo vašom Controlleri, si vytvorte pohľad (súbor bude zatiaľ prázdny). aplicationviewsscriptshelloworldindex.html

Každa akcia je public funkcia v triede controllera a musí byť pomenovaná menoakcieAction. menoakcie začína malým písmenom ale aj ostatné písmena sú male.

Teraz si vytvorte novú akciu hello. A nezabudnite si vytvoriť aj pohľad (súbor bude tiež zatiaľ prázdny) aplicationviewsscriptshelloworldhello.html

    public function helloAction ()
    {
        $helloRetazec= 'Hello world';
        echo $helloRetazec;

    }

Keď v prehliadači otvoríte http://zend.test/helloworld/hello, kde helloworld je váš controller a hello je action, ktorú voláte. Vypísali ste hello world pomocou controlleru.

Init sa vykonáva vždy pri volaní controlleru a ak do prehliadača vložíte cestu http://zend.test/helloworld obsahujúcu len controller a neobsahujúcu akciu, vykoná sa automatický indexAction.

V ďalšej časti príkladu aplikácia vypíše text pomocou modelu. Vytvorte model  applicationmodelsHelloworld.php

<?php

class Application_Model_Helloworld
{
    public function sayHello ($name)
    {
        return '2. Ahoj, ' .$name . '! <br>';
       
    }
}

Do action helloAction pridajte nasledovné riadky.

        $helloWorldModel = new Application_Model_Helloworld();
        echo $helloWorldModel->sayHello('Peter');

Controller poslal modelu sayHello parameter Peter. A ten vráti 2. Ahoj, Peter! 

Ako tretie si vyskúšajte vypísanie textu pomocou View.  Do action helloAction doplňte nasledovné riadky.

        $helloWorldModel = new Application_Model_Helloworld();
        $this->view->helloRetazec = '3.' . $helloWorldModel->sayHello('Peter');

applicationviewsscriptshelloworldhello.phtml

<?php
   
    echo $this->helloRetazec;

 ?>

V ďalšej časti seriálu sa dozviete, ako pracovať s nástrojom Zend_Tool, zistíte načo slúži bootstrap.php a budete si môcť pomocou príkladu vyskúšať vytvoriť webaplikáciu slúžiaci na blogovanie.

Komentáře

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

Nevím kolik toho má autor naprogramovaného v ZF, ale toto uchopení tématu se mi zdá býti značně nešťastné (přesto se mi první díl zdál dosti slibný)

oj

A navíc je to slovensky… u „priečinku“ jsem skončil.

Milan

oj, mal si si to prelozit Google translatorom ked si nerozumiel…ach jaj

Martin Hassman

Děkujeme za informaci o vašich intelektuálních schopnostech. Ale my u priečinků rozhodně neskončíme 8-)

omar

Nevis co je slozka?tučný text

Martin Hassman

Můžete to prosím konkretizovat? Seriál se teprve rozjíždí, připomínky vítáme.

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

Nerad kritizuji, když jsem sám nic nevytvořil, ale pokusím se konstruktivně. Tenhle díl ukázal, jak se to dělat nemá (echovat v controlleru). To by mělo být maximálně uvedeno jako „takhle to nedělejte, ale jde to“. V textu ale není o tom, že je to špatný přístup ani slovo. Pominuli-li, že je to prasecké, tak čtenář narazí velmi brzy na to, že se mu to kvuli output bufferingu nebude posléze vůbec echovat tam, kde si představuje…

V neposlední řadě také nedodržuje coding standards (správně je controller HelloWorldCon­troller – jeho url a název složky s view pak hello-world).

Na druhou stranu je třeba hodnotit kladně, že se někdo pustil do českého step-by-step tutoriálu pro začátečníky. I když možná by bylo lepší vycházet z existujícího tutoriálu (aka Akrabatu), ke kterému existuje i český překlad (http://www.zendframework.cz/zaciname-se-zend-frameworkem-preklad/) od Martina Hujera.

Reklama: Osobně se také snažím do komunity něčím přispět a trochu ji rozhýbat pomcí ZF meetupů (http://srazy.info/prvni-zf-meetup-praha/2341). Ale zatím se tam scházíme spíš pokročilejší vývojáři a tomu také přizpůsobujem program. Ale určitě se nebráníme uspořádat nějaký quickstart někdy.

Cooler

Taky bych se rád přidal, pokud možno konstruktivně.
Chápu, že každý hned chce hello world…
Zend mě živí, ale takhle bych se ho nenaučil, jenom by mě to mátlo.

1. Zend Framework je především MVC. Pokud nebude jasně vysvětleno co je M, co je V a co je C a která funkcionalita kam patří a jakými návrhy se řeší, nemá to smysl.

2. Zend_Tool jsem nikdy nepotřeboval. Možná je super, co já vím. Každopádně ale zase něco bude dělat věci místo mě, aniž bych jim rozuměl.
To je pro výuku IMHO špatně.

3. OOP je OOP. V případě frameworků, rozhodně v případě Zendu, je o dědění tříd, které již v Zendu existují.
Nejprve je potřeba vysvětlit co která třída kdy kde dělá a až potom ji jít dědit a rozšiřovat.

4. U velkých MVC frameworků je hlavní problém s tím KDY, tedy kdy se co zavolá, co se zavolá dříve, co později atd.

Očekával bych tady obrázky jako Request Lifecycle, Dispatch Workflow atd. Bez toho to totiž nikdy nikdo nemůže pochopit. Může napsat hello world, může i vytahat data z databáze a vypsat je do tabulky, ale nemůže umět Zend.

Cooler

Jo a koukám, že někdo udělal echo v Controlleru.
Takže první, základní, naprosto zásadní pravidlo MVC bylo porušeno hned na začátku.
To si – s dovolením – nedělejte p*del.

David Grudl

Hello world všichni znají a vyplatí se jít podle Komenského didaktických zásad: od jednoduchého ke složitému, od známého k neznámému.

omelkes

To je sice pravda, ale zrovna tento způsob není příliš šikovný. Není ani příliš jednoduchý (není řečeno proč používat MVC), ani není správně (echo v control).
Pravda je, že vede od známého. Hello world znají všichni.
Ale na vypsaní Hello nepotřebuji framework, to mi stačí html.

Podle mě výborně je to vysvětleno na stránkách symfony:
http://symfony.com/doc/master/book/from_flat_php_to_symfony2.html

Celý myšlenkový postup článku postupuje od vylepšování čistého PHP přes jasné a logické úpravy až k MVC a násleně k tomu jak je ten samý příklad udělán v symfony. A z článku je jasné proč nepoužívat echa v modelu a controleru.

Michal

Takze ty chces vlastne po rootu aby ti sepsala dokumentaci?

omelkes

Nikde jsem nic takového neřekl. Ten odkaz je ukázka toho jak si myslím, že by se takové články měli psát. Rozhodně svůj názor redakci nevnucuji a nechci aby přepsali dokumentaci symfony, tu si umím přečíst sám.

Na druhou stranu, autor článku ten odkaz nemusí znát, a třeba se nad tím zamyslí a další článek napíše lépe. Nebo toho nechá úplně. Nebo bude psát dále, stále stejně. To už je na něm a na redakci.

Michal

V pohode, je to tvuj nazor a ja chapu proc ho mas. Stejne si ale myslim, ze ten clanek kvuli tomuhle rozhodne nemusi bejt spatnej.
Me vzdycky prekvapuje kolik lidi v diskuzi vi o tom jedinem zpusobu jak se takovy clanky maji psat, zrejme je jinde pisou a ja o nich nevim..

Podle me je dobre ze autor ten clanek pise a rozumy napriklad o tom, ze v controleru se echo nepise mi prijdou zcestny.
Spousta clanku je totiz mnohem lepsich prave kvuli tomu, ze nektere veci proste vypustej a touhletou prasarnou se malicko priblizi novackum, ktery jsou zvykly echovat v proceduralnim skriptu.

Myslim si ze lidi by si meli z tech clanku umet vzit co jim muzou dat a bejt trochu trpelivejsi v tom za co zbuznout autora.
Nepochopim ze nekdo ma zapotrebi nadavat autorovi kvuli tomu, ze neumi napsat gramaticky spravne vetu. O to prece vubec nejde.

omelkes

Být nováček, tak se po přečtení sám sebe ptám, proč použít MVC a Zend, když je to složité, pomalé, je tam spousta knihoven navíc a vlastně to píši stejně jako svůj procedurální kód, který vypadá stejně, jen místo 30 ms to trvá vteřinu.
Na tuhle otázku článek neodpovídá a v tom je ten základní problém.

Takže to není použitelné pro člověka, který chce použit MVC a pochopit ten návrhový vzor. Neodpovídá na otázky jak a proč se používá.

A jako úvod do zendu pro člověka co ví co je MVC a chce si vybrat framework to také není dobré, protože hned na začátku jsou v kódu ty prasárny, které nechce používat.

Co se týče kritiky gramatiky, nebo sloveštiny, tak v tom souhlasím. A také ji nekritizuji.

David Grudl

To je výborný postřeh!

alancox

Psát pro začátečníky je ukrutně těžké.

Když jsem dopsal svou dávnější knihu „PHP a MySQL bez předchozích znalostí“, tak se z větší části skládala z vysvětlivek, které začátečníkovi vysvětlují asi miliardu věcí.

Zároveň jsem doufal, že příště budu psát pro profesionály, protože je to asi tisíckrát jednodušší a je s tím tisíckrát méně práce.

Psát pro začátečníky má jednu výraznou výhodu – uspokojíte tím masochistické choutky, pokud nějaké máte. Protože začátečníci čekají OBJASNĚNÍ, zatímco kritikové z řad profesionálů čekají VĚDECKOU PRÁCI na obhájení velkého doktorátu a složitý terminologicky nečitelný rukopis.

Když napíšete úspěšnou a velmi dobrou knihu/text pro začátečníky (jako se mi to třeba povedlo s mou knihou), pak si můžete být na tuty jistí, že vás zpraží profesionálové – protože, protože jim to přijde moc jednoduché. Když Vás začnou chválit příliš mnoho profesionálové z řad „já už to dělám mnoho let“, pak víte, že kniha/článek/text pro začátečníky je napsán špatně. Je napsán pro jiného čtenáře, než je začátečník.

Psát pro začátečníky je pekelně těžká práce, jedna z nejtěžších, které si můžete v technickém textu stanovit.


Budou to právě profesionálové, kteří budou trvat na tom, že předtím, než začátečník napíše Hello World musí být vysvětleno asi sto tisíc termínů, vztahů, obrázků, vnitřních implementačních detailů. Běda jestli je budete plně poslouchat při psaní textu pro začátečníky. Co na tom, že začátečník ztratí motivaci a vykašle se na to, nebo to nepochopí?

Ba právě naopak, musí být vysvětleno naprosto nezbytné minimum co jde. Není třeba na začátek vysvětlovat, co přesně MVC je. Proč? Je možné to nastínit a postupně upřesňovat a doplňovat jak bude potřeba.

Neměly by ovšem být používány špatné techniky a pokud ano, mělo by být výrazně upozorněno, že takto ne (Controller plnící úlohu View).

Prostě jsou dvě jistoty při psaní článku pro začátečníky:

1) chvíli trvá, než se člověk naučí psát pro začátečníky

2) profesionálové a znalí vás zkritizují, že by si pes od vás kůrku nevzal

(Pokud vás znalí nekritizují, píšete pro začátečníky špatně!!! Většina profesionálů má velmi úzké zaměření pohledu a v jeho mozku není poznatek, že text se musí psát s ohledem na cílového čtenáře.)

omelkes

Souhlasím, psát pro začátečniky je těžké, a člověk by se měl držet jednoduchosti a snažit se uceleně vysvětlit jednu věc. Proto se mi článek nelibí, protože vysvětluje dvě věci současně poněkud neštastným způsobem.

Jakub Vrána

Ať už se píše jakýkoliv text, tak v něm nesmí být chyby. Pokud v něm jsou záměrná zjednodušení, tak je vhodné na ně upozornit. Dobrá forma je: „Mohlo by vás to napadnout napsat takhle… Ale to by mělo tyhle problémy, takže je lepší to napsat takhle…“. Nebo aspoň: „Tenhle přístup má určité problémy, jak si ukážeme v dalším díle.“

Souhlasím, že napsat text pro začátečníky je těžké, ale tenhle článek by mohl mít mnohem míň chyb a přitom být pro ně stále stravitelný. Například já jsem v ZF začátečník a na základě tohoto článku bych se naučil především zlozvyky.

Pilgrim

Taky tak nějak nemohu pochopit, co má tento článek společného s ZF. Je vůbec potřeba psát články o ZF? Buď napíšu článek o OOP nebo o ZF jako takovém. Jestli někdo neumí OOP, tak nechť si o tom přečte jinde.

Wenca

O zendu nevim zhola nic, nicmene pocitam ze i zend ma neco jako dependency injection. Nebylo by vhonde jiz od zacatku ucit lidi vyuzivat DI a mit tak dobry zaklad pro testovatelny kod?

A nabizi se taky jista souvislost s jinym aktualnim serialem na zdrojaku a to „Testování a tvorba testovatelného kódu v PHP“, co kdyby serial o Zendu privadel pravidla ze serialu o Testovani do praxe? Urcite by to rade lidi pomohlo oba problemy pochopit vice v kontextu.

Martin Hassman

Obávám se, že silnější provázání obou seriálů nedokážeme. Vycházejí souběžně, mají své připravené osnovy a domluvy mezi autory by to (oběma autorům) dost komplikovali. Nicméně nebráníme se vydání podobných spojovacích textů do skončení obou seriálů, pokud je někdo bude chtít napsat.

LesTR

Nejde jen o to, že je složité provázat práci dvou autorů, hlavní problém je v tom, že Zend ve verzi 1.x nemá DI a ani mít nikdy neměl. Bohužel, díky velkým prodlevám s 2.0 ZF hodně upadl a z měho pohledu jej Symphony zválcovalo, a to nejden kvůli DI.

Větev 1.x je minimálně 2 roky v težké stagnaci a ačkoliv nechci autora odraďovat od psaní, o této verzi imho neměl psát. Zvlášť ne v čechách, kde vládne Netteismus a i Nette verzi 1.x strčí do kapsy asi tak 20x (říká člověk, který se ZF věnuje od verze 0.8, má nespočet commitů v repository, x let platné ZF CLA a filosofii Nette nemá rád :D)

Bohudík 2.0 která je teď ve stavu RC4, je někde úplně jinde a vrací ZF tam kde má být. O tom by měl někdo napsat, protože zde přichází to co je v čechách zrovna IN (ano, DI a testovatelnost kódu – počkejte si na blesk na molo).

Myslím že psát seriál o ZF 1.x je vícenež nešťastné, mám tento framework rád kvůli jeho komplexnosti, ale v tuto dobu to bude jen olej na oheň trollům.(Zde si neodpustím rýpnutí: něco jako článek od JV: co můj notorm umí a váš hloupý docritrine2 ne!)

Martin Hassman

Až se objeví onen superman schopný napsat něco o ZF2, rádi se ho ujmeme 8-)

LesTR

Martin Hujer, případně Tomáš Fejfar můžou být jedním z Hrdinů. Sám bych rád něco nepsal, jenže kde vzít čas a nekrást :(

Opravdový odborník :-)

Superman se sám od sebe neobjeví. Ale zkuste zvednout honoráře alespoň na trojnásobek a zaveďte oponenty (ne, korektor – jestli tu vůbec nějaký je – nestačí).

Michal

Proc myslite ze vsechno vzdycky ma vyresit nekdo jinej?
Bud prilozim ruku k dilu, nebo aspon drzim krok a nekritizuju ostatni, kteri z vlastni vule a za hubicku (pokud ne zdarma) neco delaji ne?
Myslim ze totez se Vam snazi nastinit autori toho clanku a maji pravdu. Neumim si ani predstavit jak frustrujici musi bejt psat nejakej podobnej serial, davat tomu svou energii a potom cist v diskuzich kritiku gramatiky..

Pooky

DI je až u ZF2.

hurvajs77

Koukam, ze psat clanek na Root.cz uz muze psat kdokoliv. Autor „programator“, ktery uci jine lidi psat v ZF a sam udela takove praseciny jako je echo v controlleru, nedodrzeni stabni kultury, by radeji nic psat nemel. Nehlede na to, ze dnes, pokud by se psal clanek, tak by mel byt spise o ZF2.

Nechapu redakci, pokud musela zacit vydavat claneky o ZF, ze treba neoslovila nekoho fundovaneho jako je treba Martin Hujer nebo Tomas Fejfar. Na druhou stranku lepsi tohle, nez clanek o nette paskvilu

Martin Hassman

Děkujeme za vážně nádherný názor 8-) Na většinu jsem už odpověděl dřív. Pokud Martin a Tomáš někdy budou chtít něco napsat, mají dveře otevřené. Fakt, že o Zendu za ty dlouhé roky co se v ČR používá vzniklo jen minimum materiálu v češtině o něčem svědčí. Na druhou stranu se nám to třeba podaří změnit.

hurvajs77

To, ze nevznikly dokumenty v cestine o ZF, je spise tim, ze drtiva vetsina programatoru umi anglicky alespon na urovni psanych textu. Staci projit Google a dostanene plno odkazu na clanky. Samotny Zend ma tutorial na svych strankach :).

Prominte, ale jestli bude autor pokravovat v dalsich dilech stejnym stylem jako doposud, tak rozhodne nezmenite stav ceskych clanku o ZF. Prijde mi, ze autor videl ZF z hodne rozjeteho rychliku.

Michal

Dokonala ukazka češství v diskuzich. Presne kvuli tomuhle tady techhle clanku vychazi jak safranu.

Opravdový odborník :-)

Zajímavé je, že mentalita čtenářů je zhruba konstantní, ale výraznější úpadek tohoto (pod)serveru se objevil až po změně provozovatele a šéfredaktora.

Jenže to je bohužel špatná metrika. Obecně vnímaná kvalita se zhoršuje s časem vždy téměř nezávisle na změnách (stačí dlouhodobě sledovat vnímání jakéhokoliv zpravodajského projektu). Tím netvrdím, že se zlepšujeme (ani zhoršujeme), pouze to, že vnímání „je to horší a horší“ je konstantní všude.

Pepa

Kolik nových webových projektů, aplikací a startupů za posledních 5 let vzniklo na PHP a jeho frameworcích? Já si žádnej nevybavuju, skoro všechno je Django/Python nebo Rails/Ruby. Já chápu, že PHP má v ČR historicky velmi silnou základnu, ale jsem přesvědčenej, že když sem zavítá nějakej nováček a vy ho uvrtáte zase do PHP, tak mu nesmírně ublížíte.

Pooky
Pepa

přečti si to znovu a pomaleji

Pooky

Tož, mám dobru náladu :)

Tedy, prvně ta druhá část – „Já chápu, že PHP má v ČR historicky velmi silnou základnu, ale jsem přesvědčenej, že když sem zavítá nějakej nováček a vy ho uvrtáte zase do PHP, tak mu nesmírně ublížíte.“ Pokud tu máš čísla, že skoro každý 3 web, používá PHP, neznám pro začátečníka nic lepšího než právě PHP. Má 100% šanci, že se tu s ním setká, i kdyby dělal jenom hloupý formulář pro maličkou firmičku.

K začátku, nevím kolik webových aplikací (startupů – na toto slovíčko jsem trošku alergický) vzniklo v posledních letech a používá PHP, ale rozhodně jich málo není. Přesná čísla nemám, pokud je máš ty a vyvrátíš to tvrzení, budu jenom rád.

Michal

+ za alergii vuci slovu „startup“. Ja ho nenavidim od zacatku :-). Pripada mi to jako kdyby vsechny projekty do doby vynalezeni toho slova nikdy ani nezacaly. Teprve az ted se s projekty konecne zacina a HLAVNE se o tom mluvi :-)

marek

Článek je super, v kontextu s dalšími zdroji, které nejsou tak lehce stravitelné jako tohle. Mě osobně to moc pomohlo.

Jen bych upozornil na drobné chybky:
1.pohledy controlleru Helloword nemají příponu html, jak je uvedeno ale phtml
2.controller HelloworldCon­troller.php. je v adresáři controllers, a ne jak je uvedeno controller

Cooler

Mohl by mi autor vysvětlit, co je šipka č. 4 v obrázku č. 1 – MVC architektura?
V článku stojí: (4). Nakoniec vytvorí pohľad výpis údajov a radič ho pošle naspäť prehliadaču.

Proč tedy vede šipka z View do Modelu?

David Grudl

K popisu šipky se pojít ten text před závorkou s číslem, v tomto případě „V niektorých implementáciach sa môže stať, že pohľad požaduje údaje od modelu, resp. model informuje pohľad o zmene údajov“.

Nicméně obrázek je zavádějící, konkrétně myslím šipku č.2. Vypadá to, že model ví o (nebo má závislost) na kontroleru, což vlastně ani text článku neříká. Ta šipka tam nemá co dělat.

Cooler

Je to tak, neumím ani číst :-)

Cooler

Mimochodem by stačilo zadat „MVC Oracle“, zkopírovat obrázek http://java.sun.com/developer/technicalArticles/javase/mvc/images/Figure1.gif
A bylo by to správně, žejo :-)

Cooler

Dám si tu práci a pokusím se to vysvětlit po svém, doufám, že to někomu pomůže.
Nejprve si otevřete obrázek diagramu MVC pro jasné pochopení:
http://i.iinfo.cz/images/433/priebeh-poziadavok-v-mvc-architekture-1.png

___Toto v obrázku není:

1. Uživatel zadá URL. (příklad: „vypiš článek č. 52“), takže browser odešle URL na server (HTTP request)

2. Server najde správný Controller, který pro danou URL použije.

V případě Zendu je URL „propojená“ (mapovaná) se správnou třídu Controlleru a zároveň s nějakou akcí (Action), což je metoda této třídy. Je to tedy dvojice Třída+metoda této třídy.
např. DokumentController (class, třída), zobrazitDokumen­tAction (method, metoda, funkce).
V této metodě (funkci) je potom kód samotného Controlleru.

To může být trochu zavádějící. Pro pochopení obrázku raději na slovo akce (Action) v tuto chvíli zapomeňte a představte si, že Controller má vždy jen jednu akci, aby se vám to nepletlo.

___Toto v obrázku je:

3. Controller si řekne o data Modelu, aby s nimi mohl pracovat. (najde článek č. 52)
$clanek = $model->najdiClanek(52)
Na obrázku jsou to šipky 1+2.

4. Pokud je to potřeba, Controller provede úpravy těchto dat Modelu
„vypiš článek č. 52“ může např. udělat $clanek->pridejPocetPrec­teni(1) )
v jiných případech např. smaže článek, označí ho jako přečtený atd.

5. Controller předá tato data do View.
$this->view>clanek = $clanek;
Na obrázku šipka 3

6. View vytvoří výslednou stránku.
Nebo nějakou jinou odpověď, např. může vypsat data jako JSON nebo XML, což je časté v případě, kdy vypisujeme výsledek AJAXových volání.
V našem případě HTML stránku, kde je článek č. 52.

V Zendu by bylo View představováno souborem zobrazitDokumen­t.phtml (standardně se jmenuje podle jména akce / metody).

___ Toto v obrázku není:
7. Výsledek se KONEČNĚ pošle zpět do browseru a uživatel vidí článek č. 52.

8. Zend je PHP aplikace, takže se na serveru všechno smaže z paměti, View již neexistuje (uživatel se nedívá na view, ale na výslednou stránku, kterou View vytvořilo). Neexistuje ani Controller, ani Model (data modelu jsou samozřejmě někde uložena např. v databázi, ale samotný model již neexistuje).
Prostě na serveru není z předchozího už vůbec nic.
To je hlavní rozdíl od technologií jako jsou např. Java (J2EE) nebo .NET

_____________­________________________­________

A ještě bych rád něco dodal k dalšíému diagramu MVC
http://java.sun.com/developer/technicalArticles/javase/mvc/images/Figure1.gif
Tento diagram je v angličtině a trochu složitější a hodně obecný. Je určen především pro klasické aplikace (představte si např. aplikaci na telefonu).

Na diagramu je u View, že „posílá uživatelova gesta do controlleru“.
To se v případě PHP / Zend aplikací nemůže stát, přesně z důvodu bodu 8.

Ve chvíli, kdy uživatel klepne např. na tlačítko „označit článek 52 jako oblíbený“, View již neexistuje (opakuji, uživatel nekouká na View, ale na stránku, kterou View vykreslilo), View bylo z paměti serveru vymazáno.

Server se ale musí o klepnutí na tlačítko „označit článek 52 jako oblíbený“ nějak dozvědět, jinak bych příště neviděl článek jako můj oblíbený.

Ve chvíli, kdy uživatel klepne např. na tlačítko „označit článek 52 jako oblíbený“, vyvolá se nějaká URL – buďto se otevře nová stránka, nebo se to provede na pozadí (javascript, AJAX). Ale rozhodně se pošle na server nějaká URL (přesněji HTTP request).
Dále vše probíhá od bodu 2.

Takhle nějak bych si představoval popis MVC pro technologii PHP na webu.
Nemám víc času, mám také svůj život :-)
Napsal jsem to narychlo a doufám, že tam němám nějakou botu. :-)

maikoo

řekl jsem si rok a více jsem na ZF nic nedělal snad opráším jedním očkem v tomto seriálu ale po druhé ukázce zrdojáku jsem zjistil že vlastně dál číst nemusím.

Četl jsem některé komentáře… abych přidal svou do soudku …letmo mi přišlo že se autorům tady snažíte vysvětlit jak to mají psát a o čem je ZF. Raděj doporučuji soustředit svou energii do hledání lepšího autra na toto téma.

Na zendu jsem dělal nějaké ty „menší“ CRM řeší atp. Rád bych se toho ujal ale práce mám až nad hlavu. GL ..autorum ať se stím poperou. Nejspíše se ve vývoji v ZF a v tom jak psát tutoriál posunou dále po napsání tohoto seriálu ..doufám že ta cena za tuto zkušenost nebude příliš veliká když budu otvírat na ZF zpackané projekty na kterých se utratilo z pohledu firmy nechutné peníze.)

maikoo

samozřejmě ..vinu za zpacké kody nechci přidávat na bedra těmto autorům .)

..jen mě to prostě vytočilo a to jsem ani nezačal pořádně číst :D

Cooler

Protože kritika má i ostatních byla často ostrá, nabízím autorovi článku, že s ním rád budu příští díly konzultovat. Sám nechť zváží, zda mu to k něčemu bylo. Snad bude čas. Stačí mi nějaký kontakt na něj do komentáře a ozvu se mu.

Snad to bude přínosnější, než jen stále prskat, co říkáte? :-)

Cooler

Zdarma samozřejmě, kdyby to snad nebylo jasné :-)

peter.grezo

ahoj,

poslal by si mi prosim ta na seba kontakt?

Dakujem PG

peter.grezo

Postupne citam vsetky nazory. Dakujem za ne a za usmernenie.

Ked som tento clanok pisal chcel som to cele uplne zjednodusit aby to bolo pre uplnych zaciatocnikov. Co sa mi moc nepodarilo. Pokusim sa dalsi diel napisat uplne inym stylom.

Ked sa nato spatne divam je pravda ze som tam nespravne popisal niektore casti a tym padom to moze vyzerat ze napriklad vypisujem pomocou controlleru. V skutocnosti som to myslel tak ze ide vypisat aj pomocou controlleru, modelu a view. Ale neuviedol som co je spravne a nespravne. Pred vypisom je aj preto cislo lebo som tym chcel znazornit co sa prve druhe tretie spracuje.

omelkes

My děkujeme za článek, ono kritizovat je snadné, něco vytvořit docela těžké. Když by jsi chtěl další článek zkonzultovat s někým, kdo pracoval se Zendem jen krátce, tak mi klidně napiš, rád si to přečtu. Mail mám na gmailu.

Rob

ZF neznám napsal jsme si vlastní FW když ještě ZF byl vpodstatě v plenkách.

Nicméně můj FW funguje tak, že pokud bych něco vyEchoval v controleru tak controler samozřejmě pozná co se stalo a následují tyto akce:

1. Zápis do error logu.
2. Na konec stránky přidám varování uživateli, že asi není úplně vše ok a že má zmáčknout continue
3. Neudělám redirect na View pomocí headeru (poněvadž by se to nepovedlo) ale místo toho vygeneruju link continue, pomocí něhož se uživatel „ručně přesměruje“ na View (aby mohl vůbec pokrařovat v běhu aplikace – předání aktuální stránky atd…)

Tyto akce mohu ve svém FW v daném příkazu controleru samozřejmě povypínat, nicméně autor v příkladu nic nevypínal a překvapuje mě, že ZF si vůbec takovéto věci nechá líbit a nemá to nijak ošetřeno.
Takže existenci celáho tohoto příkladu vidim primárně spíš jako chybu ZF než jako chybu autora. FW by snad měl sám védst programátora k psaní správného kódu nebo ne ?

Jakub Vrána

Kde by v této ukázkové aplikaci mělo dojít k ošetření dat proti XSS? Co když by $name byl vstup od uživatele? Ve stávajícím kódu by to šlo doplnit buď do controlleru nebo do modelu. Oboje je špatně, k ošetření by totiž mělo dojít v pohledu. Ono to vypadá, že je celkem jedno, kam se to v ukázce použité <br> šoupne, ale právě takovéhle věci dělají rozdíl mezi dobrou a špatnou architekturou.

Není to nějaké záměrné zjednodušení – kód by nebyl složitější, když by byl napsaný správně.

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.

Pocta C64

Za prvopočátek své programátorské kariéry vděčím počítači Commodore 64. Tehdy jsem genialitu návrhu nemohl docenit. Dnes dokážu lehce nahlédnout pod pokličku. Chtěl bych se o to s vámi podělit a vzdát mu hold.