Zend Framework 2

  • 7,059 views
Uploaded on

Sviluppo di applicazioni web in PHP con Zend Framework. Le novità della versione 2 e stato dell'arte del progetto

Sviluppo di applicazioni web in PHP con Zend Framework. Le novità della versione 2 e stato dell'arte del progetto

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
7,059
On Slideshare
0
From Embeds
0
Number of Embeds
3

Actions

Shares
Downloads
89
Comments
0
Likes
8

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Sviluppo di applicazioni PHP conZend FrameworkLe novità della versione 2.0 e stato dellarte del progettoEnrico Zimuel (enrico@zend.com)Senior PHP Engineer, Zend TechnologiesZend Framework Core TeamPUG Torino, 26 Gennaio 2012 © All rights reserved. Zend Technologies, Inc.
  • 2. Sommario● Perchè utilizzare un framework di sviluppo?● Introduzione a Zend Framework● Caratteristiche del progetto● La versione 1.x● La nuova release 2.0● Larchitettura di ZF2● Futuro di ZF2 © All rights reserved. Zend Technologies, Inc.
  • 3. Perchè utilizzare un framework? © All rights reserved. Zend Technologies, Inc.
  • 4. Framework● Un framework di sviluppo è un insieme di librerie o classi riutilizzabili, studiate per facilitare limplementazione di un progetto software.● Caratteristiche di un framework: ▶ Riusabilità ▶ Standardizzazione ▶ Estensibilità ▶ Qualità del codice ▶ Sicurezza © All rights reserved. Zend Technologies, Inc.
  • 5. Vantaggi nellutilizzo di un framework● Velocità di sviluppo ▶ Riduzione del time to market● Standard nella scrittura del codice ▶ Facilita il lavoro in team● Qualità del codice ▶ Utilizzo di codice testato● Sicurezza ▶ Migliorare la sicurezza © All rights reserved. Zend Technologies, Inc.
  • 6. Come scegliere un framework● Diffusione del framework● Documentazione● Supporto● Licenza dutilizzo● Curva di apprendimento © All rights reserved. Zend Technologies, Inc.
  • 7. Esempi di framework software● Java ● Perl ▶ Spring ▶ Catalyst ▶ Struts ▶ Mojolicious ▶ Jboss ● Ruby● ASP/C#/VB ▶ Ruby on Rails ▶ .NET ▶ Padrino● PHP ▶ Sinatra ▶ Cake PHP ● Python ▶ CodeIgniter ▶ Django ▶ Symfony ▶ Pylons ▶ Zend Framework © All rights reserved. Zend Technologies, Inc.
  • 8. Zend Framework © All rights reserved. Zend Technologies, Inc.
  • 9. Zend Framework● Framework PHP per lo sviluppo di applicazioni web ▶ > 10 milioni di download ▶ > 500 sviluppatori ▶ > 10 milioni hits su Google● Open source, licenza basata su new BSD● Sito del progetto: http://framework.zend.com● © Zend Technologies Ltd. © All rights reserved. Zend Technologies, Inc.
  • 10. Zend Technologies● Zend Technologies Ltd, the PHP Company● Fondata nel 1999 da Andi Gutmans e Zeev Suraski, gli sviluppatori del PHP 3.0● Quartier generale nella Silicon Valley a Cupertino (USA)● Uffici in: Francia, Germania, India, Irlanda, Israele, Italia● © PHP Engine 2 (linterprete del PHP)● Sito: http://www.zend.com © All rights reserved. Zend Technologies, Inc.
  • 11. Alcuni progetti basati su ZF © All rights reserved. Zend Technologies, Inc.
  • 12. Breve storia di ZF● Ottobre 2005: Annuncio del progetto● Marzo 2006: Prima versione (pulic review), 0.1.0● Luglio 2007: Prima versione stabile 1.0● Marzo 2008: Prima minor release 1.5.0 ▶ Zend_Form, Zend_Layout● Aprile 2009: 1.8.0 ▶ Zend_Tool, Zend_Application● Agosto 2009: 1.9.0 ▶ Supporto PHP 5.3 © All rights reserved. Zend Technologies, Inc.
  • 13. Breve storia di ZF (2)● Agosto 2010: Zend Framework 2.0.0dev1● Novembre 2010: 1.11.0 ▶ Supporto dispositivi mobile tramite Zend_Http_UserAgent ▶ Simple Cloud API tramite Zend_Cloud● Novembre 2010: Zend Framework 2.0.0dev2● Giugno 2011: Zend Framework 2.0.0dev3● Settembre 2011: 1.11.11● Ottobre 2011: Zend Framework 2.0.0beta1● Dicembre 2011: Zend Framework 2.0.0beta2 © All rights reserved. Zend Technologies, Inc.
  • 14. Caratteristiche di ZF● Architettura aperta ▶ Facile integrazione in progetti di terze parti ▶ Design del tipo “Use at will”● Completamente ad oggetti in PHP 5● Codice testato, Unit test (PHPUnit)● Utilizzo di design pattern ▶ MVC, Factory, Singleton, etc● Qualche numero per ZF1: ▶ ≈ 4000 classi, ≈ 9000 files, ≈ 91 Mb ▶ ≈ 460000 linee di codice ▶ Reference guide > 1000 pagine © All rights reserved. Zend Technologies, Inc.
  • 15. Model View Controller in ZF © All rights reserved. Zend Technologies, Inc.
  • 16. Componenti del progetto ZF 1 © All rights reserved. Zend Technologies, Inc.
  • 17. Ciclo di sviluppo in ZF● Proposta di un nuovo componente dalla community● Ready for review (community)● Ready for recommendation● Pending recommendation (revisione da parte del Core Team)● Ok per il Laboratory● Testing e review● Ok per il rilascio in release (standard/extras) © All rights reserved. Zend Technologies, Inc.
  • 18. Zend Framework 2.0 © All rights reserved. Zend Technologies, Inc.
  • 19. Zend Framework 2.0● Novità principali: ▶ Nuova architettura (basata su eventi) ▶ Utilizzo di PHP 5.3 ▶ Niente più CLA (Contributor License Agreement) ▶ Git (GitHub) al posto di SVN ▶ Performance migliorate ▶ Gestione nativa dei moduli ▶ Sistema packaging © All rights reserved. Zend Technologies, Inc.
  • 20. Nuovo approccio● In ZF1: ▶ Singletons, Registries, e dipendenze tra classi scritte nel codice (hard-coded)● In ZF2: ▶ Programmazione orientata agli aspetti (Aspect Oriented Design) e Dependency Injection © All rights reserved. Zend Technologies, Inc.
  • 21. Nuova architettura● Metodologie utilizzate nello sviluppo ▶ Decoupling (ZendDi) ▶ Orientata agli eventi (ZendEventManager) ▶ Interfacce standard (ZendStdlib)● Utilizzo delle nuove funzionalità di PHP 5.3 ▶ Namespace ▶ Funzioni anonime ▶ Late Static Bindings (static::) © All rights reserved. Zend Technologies, Inc.
  • 22. Autoloading © All rights reserved. Zend Technologies, Inc.
  • 23. Autoloading● Niente più require_once!● Più soluzioni di autoloading: ▶ In stile ZF1 include_path ▶ Basato su namespace/prefissi ▶ Class-map © All rights reserved. Zend Technologies, Inc.
  • 24. In stile ZF1require_once Zend/Loader/StandardAutoloader.php;$loader = new ZendLoaderStandardAutoloader(array( fallback_autoloader => true,));$loader->register(); © All rights reserved. Zend Technologies, Inc.
  • 25. Namespace/prefissorequire_once Zend/Loader/StandardAutoloader.php;$loader = new ZendLoaderStandardAutoloader();$loader->registerNamespace( My, __DIR__ . /../library/My) ->registerPrefix( Foo_, __DIR__ . /../library/Foo);$loader->register(); © All rights reserved. Zend Technologies, Inc.
  • 26. Class-mapreturn array( MyFooBar => __DIR__ . /Foo/Bar.php,); .classmap.phprequire_once Zend/Loader/ClassMapAutoloader.php;$loader = new ZendLoaderClassMapAutoloader();$loader->registerAutoloadMap( __DIR__ . /../library/.classmap.php);$loader->register(); © All rights reserved. Zend Technologies, Inc.
  • 27. Generazione automatica di class-map● Script per la generazione automatica di class-map: bin/classmap_generator.php● Semplice utilizzo: $ cd your/library $ php /path/to/classmap_generator.php -w● Genera la class-Map del progetto nel file .classmap.php © All rights reserved. Zend Technologies, Inc.
  • 28. Performance ● Class-Maps offre un miglioramento del 25% rispetto allautoloading di ZF1, senza lutilizzo di un acceleratore bytecode (ad esempio APC) ▶ e un miglioramento del 60-85% con un acceleratore di codice ● Namespace/prefisso offre un miglioramento del 10% senza un acceleratore bytecode ▶ e un miglioramento del 40% con un acceleratore di bytecode © All rights reserved. Zend Technologies, Inc.
  • 29. Esempio: strategie multiple di autoloading sviluppo test produzione Script di generazione developer class_map Autoloading Autoloading Autoloading in stile ZF1 Namespace/Prefisso Class-map oppure Class-map © All rights reserved. Zend Technologies, Inc.
  • 30. Dependency Injection © All rights reserved. Zend Technologies, Inc.
  • 31. Dependency injection● Come gestire la dipendenza tra oggetti?● La Dependency injection (Di) è un design pattern per la gestione delle dipendenze tra oggetti © All rights reserved. Zend Technologies, Inc.
  • 32. Esempio in PHP Senza Di Con Di (in costruzione)class Foo { class Foo { protected $bar; protected $bar; … … public function __construct() { public function $this->bar= new Bar(); __construct(Bar $bar) { } $this->bar = $bar; … }} … } Contro: Pro: Difficoltà di testing Facilità di test (mock) Accoppiamento Coesione Difficoltà nel riutilizzo Semplice riutilizzo © All rights reserved. Zend Technologies, Inc.
  • 33. Di tramite setclass Foo { protected $bar; … public function setBar(Bar $bar) { $this->bar = $bar; } …} © All rights reserved. Zend Technologies, Inc.
  • 34. ZendDi● Supporta differenti pattern: – In costruzione (constructor) – Interfaccia – Tramite set● Implementa un Di Container: – Gestisce le dipendenze utilizzando una definizione (configurazione) o tramite annotazioni – Fornisce un compilatore per lautodiscover delle classi e delle loro dipendenze © All rights reserved. Zend Technologies, Inc.
  • 35. Esempio di definizione $definition = array( Foo => array( setBar => array( bar => array( type => Bar, required => true, ), ), ), ); © All rights reserved. Zend Technologies, Inc.
  • 36. Utilizzo di un Di container use ZendDiDi, ZendDiConfiguration; $di = new Di; $config = new Configuration(array( definition => array(class => $definition) )); $config->configure($di); $foo = $di->get(Foo); // contiene Bar © All rights reserved. Zend Technologies, Inc.
  • 37. Di tramite annotazione namespace FooBar { use ZendDiDefinitionAnnotation as Di; class Baz { public $bam; /** * @DiInject() */ public function setBam(Bam $bam){ $this->bam = $bam; } } class Bam { } } © All rights reserved. Zend Technologies, Inc.
  • 38. Di tramite annotazione (2)$compiler = new ZendDiDefinitionCompilerDefinition();$compiler->addDirectory(percorso di Bar e Baz);$compiler->compile();$definitions = new ZendDiDefinitionList($compiler);$di = new ZendDiDi($definitions);$baz = $di->get(FooBarBaz);Per conoscere più casi duso di ZendDi:https://github.com/ralphschindler/zf2-di-use-cases © All rights reserved. Zend Technologies, Inc.
  • 39. Event Manager © All rights reserved. Zend Technologies, Inc.
  • 40. Come estendere un framework?● Come introdurre un sistema di log in un framework?● Come aggiungere un sistema di cache, senza modificare/estendere il codice del framework?● Come introdurre un sistema di validazione, filtro, ACL, etc, senza modificare/estendere il framework? © All rights reserved. Zend Technologies, Inc.
  • 41. Event Manager● Event Manager è un oggetto per lascolto (listener) di uno o più eventi● Un listener è un riferimento (callback) ad una funzione che viene eseguita a seguito del verificarsi di un evento● Un evento è unazione che viene eseguita © All rights reserved. Zend Technologies, Inc.
  • 42. Esempiouse ZendEventManagerEventManager;$events = new EventManager();$events->attach(do, function($e) { $event = $e->getName(); $params = $e->getParams(); printf( Handled event “%s”, with parameters %s, $event, json_encode($params) );});$params = array(foo => bar, baz => bat);$events->trigger(do, null, $params); © All rights reserved. Zend Technologies, Inc.
  • 43. MVC© All rights reserved. Zend Technologies, Inc.
  • 44. Architettura orientata agli eventi ● Una tipica applicazione ZF2 è composta da un sistema di routing, da uno o più moduli e da un gestore degli eventi (event manager) ● Una rotta restituisce il nome di un controller e di unazione, per ogni modulo ● I controller sono prelevati da un container (Di) ed eseguiti ● Il routing ed il dispatching sono degli eventi © All rights reserved. Zend Technologies, Inc.
  • 45. Terminologia in ZF2● Applicazione: è un insieme di codice che risolve uno specifico problema di business. Idealmente, le applicazioni consumano librerie e componenti.● Modulo: è una collezione di codice, o di altri file, che implementano una funzionalità specifica (atomica) di un progetto● Libreria: è una raccolta di codice che risolve un problema generico● Componente: è una raccolta di codice che risolve un problema più specifico allinterno di una libreria. © All rights reserved. Zend Technologies, Inc.
  • 46. Moduli● Il componente base di unapplicazione MVC con ZF2 è il modulo● La struttura di un modulo è semplice: ▶ Un namespace ▶ Ununica classe, denominata Module.php © All rights reserved. Zend Technologies, Inc.
  • 47. Esempio● modules/● Foo/● Module.php © All rights reserved. Zend Technologies, Inc.
  • 48. Module.php namespace Foo; class Module { }● Di solito allinterno dei moduli sono presenti: ▶ Autoloading ▶ Configurazioni di base © All rights reserved. Zend Technologies, Inc.
  • 49. index.phpuse ZendModuleManager, ZendMvcBootstrap, ZendMvcApplication;$config = include __DIR__. /../configs/app.config.php;$modules = new Manager($config[modules]);$bootstrap = new Bootstrap($modules);$app = new Application();$bootstrap->bootstrap($app);$app->run()->send(); © All rights reserved. Zend Technologies, Inc.
  • 50. Controllernamespace FooController;use ZendMvcControllerActionController;class HelloController extends ActionController{ public function worldAction() { $query = $this->request->query(); $message = $query->get(message, Nobody); return array(message => $message); }} © All rights reserved. Zend Technologies, Inc.
  • 51. Render di una vistause ZendEventManagerEventCollection as Events, ZendEventManagerListenerAggregate;class ViewListener implements ListenerAggregate{ /* ... */ public function attach(Events $events) { $events->attach(dispatch, array($this, renderView, -100); $events->attach(dispatch, array($this, renderLayout, -1000); } /* ... */} © All rights reserved. Zend Technologies, Inc.
  • 52. Gestione delle dipendenzenamespace ContactController;use ZendMailTransport, ZendMvcControllerActionController;class ContactController extends ActionController{ public function setMailer(Transport $transport) { $this->transport = $transport; }} © All rights reserved. Zend Technologies, Inc.
  • 53. Configurazionereturn array(di => array( definition => array(class => array( ZendMailTransportSmtp => array( __construct => array( host => array(required => true, type => false), user => array(required => true, type => false), pass => array(required => true, type => false), ), ), )), instance => array( ZendMailTransport => array(parameters => array( host => some.host.tld, user => user, pass => pass )), ),); © All rights reserved. Zend Technologies, Inc.
  • 54. Gestione dei package © All rights reserved. Zend Technologies, Inc.
  • 55. Package in ZF2 ● http://packages.zendframework.com/ ● Codici sorgenti (download + github) ● Pyrus package: ▶ wget http://packages.zendframework.com/pyrus.phar ▶ pyrus.phar . ▶ pyrus.phar . channel­discover  packages.zendframework.com ▶ pyrus.phar . install zf2/<zf­package> ▶ pyrus.phar . install zf2/Zend_<component> © All rights reserved. Zend Technologies, Inc.
  • 56. Prossime release © All rights reserved. Zend Technologies, Inc.
  • 57. Prossime release di ZF2● Versione 2.0.0beta3 ▶ Prevista per fine Febbraio 2012● Versione 2.0.0beta4 ▶ Prevista dopo 6 settimane dalla beta3● ZF 1.12 (prevista per Marzo 2012) ▶ EventManager di ZF2 ▶ Autoloader di ZF2 ▶ Nuovi componenti Cloud (Rackspace) ▶ ... © All rights reserved. Zend Technologies, Inc.
  • 58. Riferimenti● Sito ufficiale ▶ http://framework.zend.com● ZF2 wiki: ▶ http://bit.ly/zf2wiki● zf-contributors mailing list: ▶ zf-contributors-subscribe@lists.zend.com● IRC: ▶ #zftalk.dev, #zftalk, #zftalk.2 su Freenode ▶ Meeting bi-settimanale su #zf2-meeting (ogni mercoledì alle 19:00, ora italiana) © All rights reserved. Zend Technologies, Inc.
  • 59. Risorse ● SVN ZF1: ▶ http://framework.zend.com/svn/framework/ ● Git guide ZF2: ▶ http://bit.ly/zf2gitguide ● GitHub ZF2: ▶ http://github.com/zendframework/zf2 ● Moduli ZF2: ▶ http://modules.zendframework.com/ ● Applicazione desempio ZF2: ▶ https://github.com/EvanDotPro/ZendSkeletonApplication © All rights reserved. Zend Technologies, Inc.
  • 60. Domande? © All rights reserved. Zend Technologies, Inc.
  • 61. Grazie!Per maggiori informazioni:http://framework.zend.com/ © All rights reserved. Zend Technologies, Inc.