Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Web FrameworksWeb Frameworks
Ciprian DobreCiprian [email protected]
Curs Programare Web, anul 4 C5 – Curs 12 1
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
ProblematicaProblematicaProblematicaProblematica• Web Frameworks…
Zend Framework: http://framework.zend.com/Symfony: http://www.symfony-project.orgC k PHP htt // k h /CakePHP: http://cakephp.org/
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Framework PHPFramework PHPFramework PHPFramework PHP• Ce e un framework?
– Cod ce permite scrierea mai rapida a aplicatiei Web.
– Defineste un mediu de dezvoltare a aplicatiilor Web sub forma workflow
– Implica codarea sub forma unui standardF i t t d lt id– Furnizeaza suport pentru dezvoltare rapida
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Frameworks…Frameworks…Frameworks…Frameworks…• Agavi Development• Akelos Development
• QPHP Development• Qcodo DevelopmentAkelos Development
• CakePHP Development• CodeIgniter
Development
Qcodo Development• Recess Development• Seagull DevelopmentDevelopment
• Flow3 Development• Fuse Development
H d D l
• Smarty Development• Solar Development• Symfony• Horde Development
• Kohana Development• Lion Development
• SymfonyDevelopment
• WASP DevelopmentYii D l tp
• Midgard Development• PHP MVC Development
PHPD Sh ll
• Yii Development• Zend Development• Zoop Development• PHPDevShell
Development• PHPOpenBiz
Development
Zoop Development• EvoCore
Developmentp
• Prado Development
20.05.2010 Curs Programare Web, anul 4 C5 – Curs 12 4
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
PHP FrameworksPHP FrameworksPHP FrameworksPHP Frameworks• Ce inseamna un framework bun?
– Usor de invatatSimplu de folosit– Simplu de folosit
– Intuitiv– Usor de extins si modificat
Aj t t d lt id i t t– Ajutor pentru dezvoltare rapida si mentenanta– Trebuie sa aiba suportul unei comunitati de
d lt t ip
dezvoltatori
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Frameworks PHPFrameworks PHPFrameworks PHPFrameworks PHP• 10. WACT (component toolkit)
9 S ll• 9. Seagull• 8. Prado • 7. PHPDevShell• 6 Zend Framework (recomandat)• 6. Zend Framework (recomandat)• 5. CodeIgniter (recomandat)• 4. Symfony (recomandat)• 3 Yii (recomandat)3. Yii (recomandat)• 2. Kohana (recomandat)
1 C k PHP ( d t)• 1. CakePHP (recomandat)
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
MVCMVCMVCMVC• Design pattern software ce permite separarea datelor
( d l) d i t f t tili t l ( i )(model) de interfata utilizatorul (view)• Model (nivelul datelor)
– Logica bazei de date: wrappere in jurul datelor, elemente de securitate.
Vi (i t f t tili t )• View (interfata utilizator)– Redarea modelului intr-o forma specifica de
interactiune de obicei sub forma unui element interfatainteractiune, de obicei sub forma unui element interfata cu utilizatorul
• Controller (gestiunea interactiunilor)• Controller (gestiunea interactiunilor)– Proceseaza si raspunde la evenimente, adesea sub
forma unor actiuni ale utilizatorului, ce pot conduce laforma unor actiuni ale utilizatorului, ce pot conduce la invocari ale modelului
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
MVCMVCMVCMVC
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
SymphonySymphony
20.05.2010 Curs Programare Web, anul 4 C5 – Curs 12 9
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
SymfonySymfonySymfonySymfony• symfony-project.com• Scris in PHP5• Documentatie
– Include o serie de aplicatii de test– Carte open-source disponibila online– Forumuri, wiki, mailing list...
• Multe plugin-uri include – CMS– Forum
Bl– Blog
A Pragmatic Look At Symfony (The PHP5 framework) for Skillswap Bristol by Darren Beale ([email protected])
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
SymfonySymfony ……SymfonySymfony ……• Configuratia recomandatag
– Apache cu mod_rewritePHP5 2 x– PHP5.2.x
• Simplu de instalat– Pear
• #> pear channel-discover pear.symfony-p p y yproject.com
• #> pear install symfony/symfony– Apache, adaugare alias in VirtualHost:
• Alias /sf /usr/share/php/data/symfony/web/sfA Pragmatic Look At Symfony (The PHP5 framework) for Skillswap Bristol by Darren Beale ([email protected])
as /s /us /s a e/p p/data/sy o y/ eb/s
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
SymfonySymfony ……SymfonySymfony ……• Dependinte minimale, toate incluse
– Creole• Abstractizare DB• Suport pentru MySQL PostgreSQL SQLite MSSQLSuport pentru MySQL, PostgreSQL, SQLite, MSSQL
– Propel• Object Relationship Mapping
PAKE– PAKE• Biblioteca pentru taskuri simple din linia de comanda
– LIMELIME• Biblioetca pentru testare functionala si de unitate
– Plus…P t t• Prototype
• Script.aculo.us• TinyMCE (WYSIWYG)
A Pragmatic Look At Symfony (The PHP5 framework) for Skillswap Bristol by Darren Beale ([email protected])
• DynArch.com Rich Calendar
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
ImplementareaImplementarea MVC aMVC a SymfonySymfonyImplementareaImplementarea MVC a MVC a SymfonySymfony• Model
– Acces la date– Bazat pe Propel (implicit)p p ( p )– Instrumente pre-construite pentru paginare,
sortare si filtrare– Modelul poate fi configurat folosind XML sau
YAML– Symfony construieste modelul!
• #> symfony propel-build-model# symfony propel build model– Symfony furnizeaza clase pregatite pentru
extinderea modeluluiA Pragmatic Look At Symfony (The PHP5 framework) for Skillswap Bristol by Darren Beale ([email protected])
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
ImplementareaImplementarea MVC a MVC a ppSymfonySymfony……
• View– Nivelul prezentare– Layout si configuratie globale
• Fiecare actiune poate avea propriul template– Symfony foloseste PHP ca limbaj back-end– Partial si Slot
Fragmente de template fara logica de business• Fragmente de template fara logica de business– Componente
• Fragmente de template cu logica de businessFragmente de template cu logica de business
A Pragmatic Look At Symfony (The PHP5 framework) for Skillswap Bristol by Darren Beale ([email protected])
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
ImplementareaImplementarea MVC aMVC aImplementareaImplementarea MVC a MVC a SymfonySymfony……y yy y
• ControllerI t di t l i d b i– Intermediar pentru logica de business
– Fiecare ‘modul’ are o clasa controller asociata ce contine o serie de metode specifice pentru diversele ‘actiuni’
• Conversia automata a URL-ului in modulul/actiunea corespunzatoaremodulul/actiunea corespunzatoare
• Metode de executie pre si post executieA Pragmatic Look At Symfony (The PHP5 framework) for Skillswap Bristol by Darren Beale ([email protected])
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Object Brokering (Object Brokering (nivelulnivelul ModelModelj g (j g (• Generarea automata a claselor PHP pornind
de la fisierul configde la fisierul config• Inlatura nevoia de efectuare a unor apeluri
repetate catre DB, furnizeaza un nivel de b t tiabstractizare
schema yml
PHP Code$p = new Post();$ tTitl (“T t P t”)schema.yml
propel:weblog_post:
_attributes: { phpName: Post
$p->setTitle(“Test Post”);$p->setBody(“the body”);$p->save();
} id: title: varchar(255) excerpt: longvarchar
$posts = PostPeer::doSelect(new Criteria());f h($ t $ t)excerpt: longvarchar
body: longvarchar created_at:
foreach($posts as $post){print “Post: “.$post->getTitle();}}
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
CRUD CRUD GenerareGenerare + + ValidareValidare(Controller + View)(Controller + View)
• Cel mai mare cosmar al unui programator Web : scrierea cod pentru multe formulareWeb : scrierea cod pentru multe formulare si elemente input, asociate cu procesoare si validatoaresi validatoare
• Symfony : genereaza template-uri Create/Read/Update/DeleteCreate/Read/Update/Delete
• Usor de customizat odata generate
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
symfony propel:generate-module admin findable FindableItem
indexSuccess.php:<h1>Findable List</h1>
<table>table<thead>
<tr><th>Id</th><th>Name</th><th>Cardinality</th><th>Points</th><th>Description</th>th Description /th<th>S findable category</th>
</tr></thead><tbody>
<?php foreach ($findable_item_list as $findable_item): ?><tr>
<td><a href="<?php echo url for('findable/edit?id='.$findable item->getId()) ?>"><?php echo $findable item->getId() ?></a></td>p p _ ( $ _ g ()) p p $ _ g ()<td><?php echo $findable_item->getName() ?></td><td><?php echo $findable_item->getCardinality() ?></td><td><?php echo $findable_item->getPoints() ?></td><td><?php echo $findable_item->getDescription() ?></td><td><?php echo $findable_item->getSFindableCategoryId() ?></td>
</tr><?php endforeach; ?>p p ;
</tbody></table>
<a href="<?php echo url_for('findable/new') ?>">New</a>
actions class php:actions.class.php:public function executeIndex(sfWebRequest $request){
$this->findable_item_list = FindableItemPeer::doSelect(new Criteria());}
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
ValidareValidareValidareValidare• Form “widgets” :
B Fi d bl It FBaseFindableItemForm$this->setValidators(array(
'id' => new sfValidatorPropelChoice(array('model' => 'FindableItem', 'column' => 'id', 'required' => false)),
' ' fV lid t St i ( (' l th' 255 ' i d' f l ))'name' => new sfValidatorString(array('max_length' => 255, 'required' => false)),'cardinality' => new sfValidatorInteger(array('required' => false)),'points' => new sfValidatorInteger(array('required' => false)),'description' => new sfValidatorString(array('required' => false)),' fi d bl t id' > fV lid t P lCh i ( (' d l' > 'Fi d bl C t ''s_findable_category_id' => new sfValidatorPropelChoice(array('model' => 'FindableCategory',
'column' => 'id')),));
Noi validatori pot suprascrie acest comportament, prin scrierea codului corespunzator inprin scrierea codului corespunzator in FindableItemForm!
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
DezvoltareDezvoltare OrientataOrientata sprespre AspecteAspecteDezvoltareDezvoltare OrientataOrientata sprespre AspecteAspecte• Symfony suporta “comportamente”y y p p• Crearea automata de hook-spots
E l l i t t “ id”• Exemplu clasic: comportament “paranoid”– Inlocuirea stergerilor cu setarea unui flagg g– Extinderea selectului pentru a evita preluarea
inregistratilor cu respectivul flag setatinregistratilor cu respectivul flag setat
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
RutareRutareRutareRutare• Problema: Tuturor ne plac URL-urile simple,
precum :precum :– http://cusearch09.com/user/image/5/320
In loc de– In loc de http://cusearch09.com/user/upload/imageThumb.php?id=5&width=320php?id 5&width 320
• Solutia:Apache mod rewrite– Apache mod_rewrite• Nu... prea complicat si greu de gestionat “on the fly”.
Necesita lucrul cu RegExp– Symfony:
• routing.ymlresized_image:
url: image/:id/:widthparam: {module: upload, action: imageThumb}param: {module: upload, action: imageThumb}
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
PluginPlugin--uriuriPluginPlugin uriuri• Symfony poate fi usor extins cu plugin-uriy y p p g• Respecta pattern-ul observer
t ti bli f ti– static public function listenToSomeSortOfEvent(sfEvent $event)
– Plugin-ul poate fi legat de oricare parte din Symfony
• Folosire: obiecte, aspecte– Securitate? AJAX?– Securitate? AJAX?
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
CakePHPCakePHPCakePHPCakePHP
20.05.2010 Curs Programare Web, anul 4 C5 – Curs 12 23
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
CakePHPCakePHPCakePHPCakePHP• CakePHP - framework open-source PHP• Automatizarea task urilor in Cake :• Automatizarea task-urilor in Cake :
– Usureaza crearea de functii de management standard (adaugare, editare sau stergere)( g , g )
– Foloseste Layout-uri si View-uri sub forma de template-uri pentru separarea logicii de business de nivelul prezentarebusiness de nivelul prezentare
– Validarea campurilor din formulare– Securizarea automata a datelor salvate inSecurizarea automata a datelor salvate in
bazele de date (ex., previne atacuri SQL injection)Include functii callback (ex efectuarea unei– Include functii callback (ex., efectuarea unei actiuni inaintea sau dupa salvare)
– Permite testarea atat a bazelor de date de test, ,cat si a celor de productie
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
StructuraStructura dede FoldereFoldereStructuraStructura de de FoldereFoldere– App: codul aplicatiilor.
– Config: toate fisierele de configurareg g– Models: modelele aplicatiilor, surse de date si comportamentul
aplicatiilorC t ll t ll l i t l li tiil– Controllers: controllerele si componentele aplicatiilor
– Views : stocheaza toate template-urile, layout-urile (header, footer) si module auxiliare (ex., AJAX).
– Vendors: clase si biblioteci 3rd party– Webroot: document root pentru aplicatie, stocheaza datele statice,
precum CSS imagini si codul JavaScript folosind de aplicatieprecum CSS, imagini si codul JavaScript folosind de aplicatie. – Locale: fisiere pentru internationalizare– Tmp: date temporare generate de sistemul de cache si loguri.p p g g– Plugins: pachete plugin
– lib/Cake : stocheaza toate functiile de baza pentru CakePHP– Vendors: alte biblioteci include intr-o aplicatie particulara
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Mult succes la examene !!!Mult succes la examene !!!
Curs Programare Web, anul 4 C5 – Curs 12 27