Zend Framework 2
Upcoming SlideShare
Loading in...5
×
 

Zend Framework 2

on

  • 7,360 views

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

Statistics

Views

Total Views
7,360
Views on SlideShare
3,585
Embed Views
3,775

Actions

Likes
8
Downloads
87
Comments
0

7 Embeds 3,775

http://www.zimuel.it 3766
http://translate.googleusercontent.com 3
http://krez0n.org.ua 2
http://www.zimuel.it. 1
https://si0.twimg.com 1
http://www.verious.com 1
https://www.google.it 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Zend Framework 2 Zend Framework 2 Presentation Transcript

    • 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.
    • 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.
    • Perchè utilizzare un framework? © All rights reserved. Zend Technologies, Inc.
    • 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.
    • 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.
    • Come scegliere un framework● Diffusione del framework● Documentazione● Supporto● Licenza dutilizzo● Curva di apprendimento © All rights reserved. Zend Technologies, Inc.
    • 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.
    • Zend Framework © All rights reserved. Zend Technologies, Inc.
    • 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.
    • 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.
    • Alcuni progetti basati su ZF © All rights reserved. Zend Technologies, Inc.
    • 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.
    • 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.
    • 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.
    • Model View Controller in ZF © All rights reserved. Zend Technologies, Inc.
    • Componenti del progetto ZF 1 © All rights reserved. Zend Technologies, Inc.
    • 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.
    • Zend Framework 2.0 © All rights reserved. Zend Technologies, Inc.
    • 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.
    • 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.
    • 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.
    • Autoloading © All rights reserved. Zend Technologies, Inc.
    • 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.
    • In stile ZF1require_once Zend/Loader/StandardAutoloader.php;$loader = new ZendLoaderStandardAutoloader(array( fallback_autoloader => true,));$loader->register(); © All rights reserved. Zend Technologies, Inc.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • Dependency Injection © All rights reserved. Zend Technologies, Inc.
    • 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.
    • 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.
    • Di tramite setclass Foo { protected $bar; … public function setBar(Bar $bar) { $this->bar = $bar; } …} © All rights reserved. Zend Technologies, Inc.
    • 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.
    • Esempio di definizione $definition = array( Foo => array( setBar => array( bar => array( type => Bar, required => true, ), ), ), ); © All rights reserved. Zend Technologies, Inc.
    • 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.
    • 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.
    • 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.
    • Event Manager © All rights reserved. Zend Technologies, Inc.
    • 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.
    • 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.
    • 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.
    • MVC© All rights reserved. Zend Technologies, Inc.
    • 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.
    • 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.
    • 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.
    • Esempio● modules/● Foo/● Module.php © All rights reserved. Zend Technologies, Inc.
    • Module.php namespace Foo; class Module { }● Di solito allinterno dei moduli sono presenti: ▶ Autoloading ▶ Configurazioni di base © All rights reserved. Zend Technologies, Inc.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • Gestione dei package © All rights reserved. Zend Technologies, Inc.
    • 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.
    • Prossime release © All rights reserved. Zend Technologies, Inc.
    • 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.
    • 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.
    • 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.
    • Domande? © All rights reserved. Zend Technologies, Inc.
    • Grazie!Per maggiori informazioni:http://framework.zend.com/ © All rights reserved. Zend Technologies, Inc.