php symfony / MVC

09.11.2007 22:06

jo takze vsimam jak sa tu lamete s phpckom vecsinou na dost primitivnej urovni.

Rad by som napisal nieco o trosku pokrocilejsom systeme, na tvorbu skor rozsiahlejsich PHP projektov.

Vola sa symfony, homepage http://symfony-project.com. Symfony je PHP framework, ktory pouziva MVC architekturu stranky, Creole na abstrakciu databazy a Propel pre ORM. O tomto vsak neskor.

MVC

Teraz sa najskor pozrime na to, ze co je to MVC. Velmi excelentny clanok sa nachadza v samotnom manualy pre symfony, ktory nie je ani tak manualom ako knihou, konkretne nieco o MVC najdete tu: http://www.symfony-project.com/book/1_0/02-Exploring-Symfony-s-Code

Takze toto velmi odporucam precitat, teraz sa pokusim ja akosi predstavit MVC architekturu:

Takze MVC znamena model-view-controller. Zakladom vsetkeho je kontroler, ktory spracovava poziadavky v tvare /controller/action/var/value/var/value/var/.. Teda z toho vyplyva, ze kazdy controller je ma priradene svoje akcie, actions. Ako ste si vsimli adresu ktoru som napisal, ta sa da velmi lahko prisposobit pomocou routovacieho systemu. To znamena, ze adresu takuto /news/list/category/15 si mozete zmenit na /news/15 bez zasahovania do .htaccess. To je vsak uz tema na iny clanok.

Takze ak napisete /news/list zavola sa kontroler news s akciou list, vecsinou je kontroler trieda, zatial co akciou je metoda. Pozor, je velmi dolezite nedavat do kontrolera logiku aplikacie, pre jednu akciu sa odporuca 5 - 10 riadkov kodu. (ja som tuto chybu nedavno urobil, a potom som mal v kode riadny bordel). O tom, kde by mala byt logika aplikacie si este povieme.

Pozrime sa na dalsiu vrstvu a to Model. Model je vlastne model tabulky prevedeny do PHP triedy. Niektore frameworky to maju urobene jednoducho, ze kazda tabulka ma vlastnu triedu, ktora extendi nejaku zakladnu triedu tabulky. Tam su potom ulozene vselijake metody, ktore potom mozete vyuzivat pri kazdej jednej tabulke.

Symfony je vsak trosku pokrocilejsie, a vyuziva Creole, co je vlastne system, ktory sa spolu s Propel-om stara o celu Model vrstvu.

Creole vyuziva pre kazdu tabulku 2* subory. Zoberme si napriklad nas priklad News. Pri generacii (ano symfony vam vsetko vygeneruje, k tomu sa dostaneme) sa vytvori trieda News a NewsPeer. Trieda NewsPeer je staticka a reprezentuje tabulku ako taku. Trieda News je naopak dynamicka a reprezentuje jeden riadok v tabulke.

Takze to v praxi funguje takto:

<?php
$novinka15 = NewsPeer::retrievebyPK(15);
$nazov = $novinka15->getNazovNovinky();
$novinka15->setNazovNovinky($nazov . " updated");
$novinka15->save();
?>

Toto je najjednoduchsi priklad pouzitia Creole. Z tabulky si vytiahneme Novinky s IDckom 15. Toto by nam uplne stacilo pokial chceme iba zobrazovat data. Ak chceme data upravovat, mozeme si vlozit novy riadok, alebo ako vidite v priklade, takto sa da jednoducho upravit riadok podla IDcka.

Myslim, ze tolko by k modelu stacilo, vratim sa k tomu este pri generacii.

No a vrstva View je ta najjednoduchsia, ide iba o zobrazovanie dat, s cim sa uz urcite kazdy stretol, napriklad pri pouziti sablonovacieho systemu Smarty. Myslim, ze k tomu nie je ani vela co pisat.

No pokracovat budem asi inokedy, v pripade ze sa tento clanok dostane k zverejneniu a bude sa pacit.

* V skutocnosti su to 4 ale k tomu sa este dostaneme

    • Re: php symfony / MVC 10.11.2007 | 10:15
      blackhole   Návštevník

      Tak rozoberame PHP na dost primitivnej urovni ked sa tu pisu clanky o tom ako sa to spravi z tej najprimitivnejsej urovne. Ty si napisal clanok o nejakom objektovo naprogamovanom frameworku (aspon to tak vyzera z prikladu). Myslim ze keby som potreboval takuto vec do PHP pre vacsiu stranku taketo funkcie si naprogramujem sam, nebudem sa babrat s nejakym symphony PHP. A okrem toho ked sa to rozobera z tej najprimitivnejsej urovne aspon pochopis ako to funguje. Otazka je ci vies viac ked vies primitivne veci z ktorych si vies spravit vsetko alebo ked vies pracovat s nejakym objektovo naprogramovanym frameworkom ktory naprogramoval niekto iny.
      Nehovorim ze by si si nieco nevedel naprogramovat sam, ale nepaci sa mi ked napises do clanku ze sa niekto lame s PHPckom na dost primitivnej urovni. Take veci uz ked chces napisat tak do komentarov k clanku a cakaj na odpovede na komentar.

      • Re: php symfony / MVC 10.11.2007 | 11:01
        pX   Návštevník

        Zcasti s tebou suhlasim, ale niesom si isty, ci by bolo take jednoduche spravit si taky framework sam. Ked som robil ten moj, tak pri prvych styroch strankach, kde som ho pouzil, som pri aplikacii na stranku prepisoval asi 10% - 30% kodu z frameworku, lebo ma napadlo, ako to spravit lepsie. - Tj ak chces dobry framework, potrebujes na to vela casu. Teda siahnut po niecom hotovom je lakave.
        ==
        Ved to zakomentuj, uvidime co sa zrube.

        • Re: php symfony / MVC 10.11.2007 | 12:25
          zero0x   Návštevník

          no presne presne si to vystihol

          ale v zivote si neviem predstavit ze by som si urobil veci na ORM, alebo nieco ako Creole..

          Takze mna viacej zaujima prakticka stranka, skor sa chcem venovat tvorbe generatorom, modulom pre AJAX a tak..

      • Re: php symfony / MVC 10.11.2007 | 11:43
        zero0x   Návštevník

        funkcie si naprogramujem sam, nebudem sa babrat s nejakym symphony PHP.

        heh este pockaj:) symfony toho dokaze ovela viacej ako si myslis

    • Re: php symfony / MVC 10.11.2007 | 11:09
      pX   Návštevník

      Vlastne si nenapisal nic co nieje pravda, ale medzi riadkami nas oznacujes za lamerov, ktori poznaju echo, if a v lepsom pripade vedia zobrazit newsy z databazy.
      Tie clanky boli pisane o tom, ako funguju zaklady, ty pises o tom, co vsetko sa da nad tym vybudovat, proste ine veci, a imho su obe potrebne.

      Obsahovo sa mi clanok lubil a dufam, ze sa o tejto teme rozpises do dalsich clankov.
      ==
      Ved to zakomentuj, uvidime co sa zrube.

      • Re: php symfony / MVC 10.11.2007 | 20:36
        srigi   Návštevník

        Ja som velmi rad, lebo mojim clankom som kcel znova rozprudit diskusie o PHP, prilakat na BH PHP koderov, ale hlavne aby tu vzikal novy obsah o PHP. Celkom sa to podarilo, na zaciatok O.K.

        zero0x pises o Symphony. Skusal si aj ine frameworky? Tvoj nazor na Zend?
        ----------------------
        Ja len v dobrom.

        • Re: php symfony / MVC 11.11.2007 | 07:51
          zero0x   Návštevník

          no v zende som vytvoril jednu pomerne velku aplikaciu, a vela veci ma na tom serie:

          • moju 3 tyzdnovu pracu pisanim modelov a kontrolerov som mohol mat za 5 minut (a potom uz iba upravovat), aj ked to by som si musel najprv napisat vlastny generator, co by povedzme trvalo nejaky ten pol dnik:)
          • modely sa mi velmi nepacili. zend mal sice tiez nieco na mapovanie vztahov medzi tabulkami, ale tie metody v absktraktnej triede pre model to vobec nevyuzivalli, akurat som si napisal vlastnu funkciu fetchAllAndJoin, ktora mi ako tak fungovala
          • este k modelom, pri zend mi velmi chybali gettre a settre, totiz pri symfony mozete vykonavat logiku pri nastavovani daneho pola, a pri zende som mal akurat insert($array data) a este update($array data, $array criteria)
          • z tohto vyplyva ze logika, ktora mala byt v modeli (vselijake osetrovanie) nakoniec zostavala v kontroleri a kod bol dost neprehladny
          • zend nema napriklad podporu pre i18n, zatial som to nevyuzival, ale ked tak nad tym rozmyslam, myslim, ze je to velmi uzitocne

          no este by sa toho dalo pisat, toto su take zakladne veci.

          nevyhodou symfony je zase, ze je to pomerne komplikovany framework, kde treba vela ucenia, ale podla mna vysledok naozaj stoji za to.