+ All Categories
Home > Documents > Web Frameworks -...

Web Frameworks -...

Date post: 19-Jul-2020
Category:
Upload: others
View: 12 times
Download: 0 times
Share this document with a friend
27
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare Web Frameworks Web Frameworks Ciprian Dobre Ciprian Dobre [email protected] Curs Programare Web, anul 4 C5 – Curs 12 1
Transcript
Page 1: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

Web FrameworksWeb Frameworks

Ciprian DobreCiprian [email protected]

Curs Programare Web, anul 4 C5 – Curs 12 1

Page 2: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

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/

Page 3: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

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

Page 4: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

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

Page 5: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

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

Page 6: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

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)

Page 7: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

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

Page 8: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

MVCMVCMVCMVC

Page 9: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

SymphonySymphony

20.05.2010 Curs Programare Web, anul 4 C5 – Curs 12 9

Page 10: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

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])

Page 11: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

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

Page 12: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

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

Page 13: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

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])

Page 14: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

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])

Page 15: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

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])

Page 16: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

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();}}

Page 17: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

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

Page 18: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

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());}

Page 19: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

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!

Page 20: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

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

Page 21: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

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}

Page 22: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

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?

Page 23: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

CakePHPCakePHPCakePHPCakePHP

20.05.2010 Curs Programare Web, anul 4 C5 – Curs 12 23

Page 24: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

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

Page 25: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare

Page 26: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

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

Page 27: Web Frameworks - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/4pw/2012/PW11-Frameworks.pdf · – Plugin-ul poate fi legat de oricare parte din Symfony • Folosire: obiecte,

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


Recommended