SlideShare uma empresa Scribd logo
1 de 61
Baixar para ler offline
Sviluppo di applicazioni PHP con
Zend Framework
Le novità della versione 2.0 e stato dell'arte del progetto



Enrico Zimuel (enrico@zend.com)
Senior PHP Engineer, Zend Technologies
Zend Framework Core Team



PUG 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
●
    L'architettura 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
    l'implementazione di un progetto software.
●
    Caratteristiche di un framework:
        ▶   Riusabilità
        ▶   Standardizzazione
        ▶   Estensibilità
        ▶   Qualità del codice
        ▶   Sicurezza




                            © All rights reserved. Zend Technologies, Inc.
Vantaggi nell'utilizzo 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 d'utilizzo
●
    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 (l'interprete 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
        ▶   ≈ 460'000 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 ZF1


require_once 'Zend/Loader/StandardAutoloader.php';

$loader = new ZendLoaderStandardAutoloader(array(
    'fallback_autoloader' => true,
));

$loader->register();




                       © All rights reserved. Zend Technologies, Inc.
Namespace/prefisso

require_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-map

return array(
    'MyFooBar' => __DIR__ . '/Foo/Bar.php',
);
                                                                        .classmap.php


require_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 all'autoloading di ZF1, senza l'utilizzo 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 set


class 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 l'autodiscover
           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 d'uso 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 l'ascolto (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 è un'azione che viene eseguita




                      © All rights reserved. Zend Technologies, Inc.
Esempio

use 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
     un'azione, 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 all'interno di una libreria.



                       © All rights reserved. Zend Technologies, Inc.
Moduli

●
    Il componente base di un'applicazione MVC
    con ZF2 è il modulo
●
    La struttura di un modulo è semplice:
       ▶   Un namespace
       ▶   Un'unica 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 all'interno dei moduli sono presenti:
       ▶   Autoloading
       ▶   Configurazioni di base



                         © All rights reserved. Zend Technologies, Inc.
index.php

use 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.
Controller

namespace 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 vista

use 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 dipendenze

namespace ContactController;

use ZendMailTransport,
    ZendMvcControllerActionController;

class ContactController extends ActionController
{
    public function setMailer(Transport $transport)
    {
        $this->transport = $transport;
    }
}




                     © All rights reserved. Zend Technologies, Inc.
Configurazione
return 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 d'esempio 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.

Mais conteúdo relacionado

Destaque

Cryptography in PHP: use cases
Cryptography in PHP: use casesCryptography in PHP: use cases
Cryptography in PHP: use casesEnrico Zimuel
 
Scalable High-Availability Session Storage with ZSCM
Scalable High-Availability Session Storage with ZSCMScalable High-Availability Session Storage with ZSCM
Scalable High-Availability Session Storage with ZSCMZend by Rogue Wave Software
 
Introduzione alla Posta Elettronica Certificata (PEC): le regole tecniche
Introduzione alla Posta Elettronica Certificata (PEC): le regole tecnicheIntroduzione alla Posta Elettronica Certificata (PEC): le regole tecniche
Introduzione alla Posta Elettronica Certificata (PEC): le regole tecnicheEnrico Zimuel
 
Integrare Zend Framework in Wordpress
Integrare Zend Framework in WordpressIntegrare Zend Framework in Wordpress
Integrare Zend Framework in WordpressEnrico Zimuel
 
Velocizzare Joomla! con Zend Server Community Edition
Velocizzare Joomla! con Zend Server Community EditionVelocizzare Joomla! con Zend Server Community Edition
Velocizzare Joomla! con Zend Server Community EditionEnrico Zimuel
 
Strong cryptography in PHP
Strong cryptography in PHPStrong cryptography in PHP
Strong cryptography in PHPEnrico Zimuel
 

Destaque (8)

Cryptography in PHP: use cases
Cryptography in PHP: use casesCryptography in PHP: use cases
Cryptography in PHP: use cases
 
Scalable High-Availability Session Storage with ZSCM
Scalable High-Availability Session Storage with ZSCMScalable High-Availability Session Storage with ZSCM
Scalable High-Availability Session Storage with ZSCM
 
Introduzione alla Posta Elettronica Certificata (PEC): le regole tecniche
Introduzione alla Posta Elettronica Certificata (PEC): le regole tecnicheIntroduzione alla Posta Elettronica Certificata (PEC): le regole tecniche
Introduzione alla Posta Elettronica Certificata (PEC): le regole tecniche
 
Integrare Zend Framework in Wordpress
Integrare Zend Framework in WordpressIntegrare Zend Framework in Wordpress
Integrare Zend Framework in Wordpress
 
Velocizzare Joomla! con Zend Server Community Edition
Velocizzare Joomla! con Zend Server Community EditionVelocizzare Joomla! con Zend Server Community Edition
Velocizzare Joomla! con Zend Server Community Edition
 
Scm
ScmScm
Scm
 
Modernizziamo IBM i con PHP
Modernizziamo IBM i con PHPModernizziamo IBM i con PHP
Modernizziamo IBM i con PHP
 
Strong cryptography in PHP
Strong cryptography in PHPStrong cryptography in PHP
Strong cryptography in PHP
 

Semelhante a Zend Framework 2

Alla scoperta di Zend Framework 1.8
Alla scoperta di Zend Framework 1.8Alla scoperta di Zend Framework 1.8
Alla scoperta di Zend Framework 1.8massimiliano.wosz
 
Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni
Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioniOpen Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni
Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioniVendini-Italy
 
Roma linuxday 2013 - nodejs
Roma linuxday 2013 - nodejsRoma linuxday 2013 - nodejs
Roma linuxday 2013 - nodejsClaudio Mignanti
 
Framework per la realizzazione di ria
Framework per la realizzazione di riaFramework per la realizzazione di ria
Framework per la realizzazione di riaLorenzo Bortolotto
 
Streaming in Java e Flex con Red5
Streaming in Java e Flex con Red5Streaming in Java e Flex con Red5
Streaming in Java e Flex con Red5Marcello Teodori
 
Deno - L'anagramma di node
Deno - L'anagramma di nodeDeno - L'anagramma di node
Deno - L'anagramma di nodeFrancesco Sciuti
 
Case study: un approccio modulare in un progetto legacy
Case study: un approccio modulare in un progetto legacyCase study: un approccio modulare in un progetto legacy
Case study: un approccio modulare in un progetto legacyMariano Fiorentino
 
Slide Mulesoft Meetup Milano #10.pdf
Slide Mulesoft Meetup Milano #10.pdfSlide Mulesoft Meetup Milano #10.pdf
Slide Mulesoft Meetup Milano #10.pdfFlorence Consulting
 
Zend Server
Zend ServerZend Server
Zend ServerGrUSP
 
Android: Introduzione all'architettura, alla programmazione e alla sicurezza
Android: Introduzione all'architettura, alla programmazione e alla sicurezzaAndroid: Introduzione all'architettura, alla programmazione e alla sicurezza
Android: Introduzione all'architettura, alla programmazione e alla sicurezzajekil
 
Blazor with .net 5 - di Gerardo Greco
Blazor with .net 5 - di Gerardo GrecoBlazor with .net 5 - di Gerardo Greco
Blazor with .net 5 - di Gerardo GrecoGiuneco S.r.l
 
Webkit presentazione ufficiale
Webkit presentazione ufficialeWebkit presentazione ufficiale
Webkit presentazione ufficialeintoinside
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPGiorgio Cefaro
 

Semelhante a Zend Framework 2 (20)

Pro php refactoring
Pro php refactoringPro php refactoring
Pro php refactoring
 
App Engine + Python
App Engine + PythonApp Engine + Python
App Engine + Python
 
Alla scoperta di Zend Framework 1.8
Alla scoperta di Zend Framework 1.8Alla scoperta di Zend Framework 1.8
Alla scoperta di Zend Framework 1.8
 
Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni
Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioniOpen Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni
Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni
 
Roma linuxday 2013 - nodejs
Roma linuxday 2013 - nodejsRoma linuxday 2013 - nodejs
Roma linuxday 2013 - nodejs
 
node.js everywhere
node.js everywherenode.js everywhere
node.js everywhere
 
Framework per la realizzazione di ria
Framework per la realizzazione di riaFramework per la realizzazione di ria
Framework per la realizzazione di ria
 
Streaming in Java e Flex con Red5
Streaming in Java e Flex con Red5Streaming in Java e Flex con Red5
Streaming in Java e Flex con Red5
 
Deno - L'anagramma di node
Deno - L'anagramma di nodeDeno - L'anagramma di node
Deno - L'anagramma di node
 
Case study: un approccio modulare in un progetto legacy
Case study: un approccio modulare in un progetto legacyCase study: un approccio modulare in un progetto legacy
Case study: un approccio modulare in un progetto legacy
 
Slide Mulesoft Meetup Milano #10.pdf
Slide Mulesoft Meetup Milano #10.pdfSlide Mulesoft Meetup Milano #10.pdf
Slide Mulesoft Meetup Milano #10.pdf
 
Il testing con zend framework
Il testing con zend frameworkIl testing con zend framework
Il testing con zend framework
 
Zend Server
Zend ServerZend Server
Zend Server
 
Standard Dev Workflow
Standard Dev WorkflowStandard Dev Workflow
Standard Dev Workflow
 
Android: Introduzione all'architettura, alla programmazione e alla sicurezza
Android: Introduzione all'architettura, alla programmazione e alla sicurezzaAndroid: Introduzione all'architettura, alla programmazione e alla sicurezza
Android: Introduzione all'architettura, alla programmazione e alla sicurezza
 
Debugging with-z-ray
Debugging with-z-rayDebugging with-z-ray
Debugging with-z-ray
 
Introduzione ad Android
Introduzione ad AndroidIntroduzione ad Android
Introduzione ad Android
 
Blazor with .net 5 - di Gerardo Greco
Blazor with .net 5 - di Gerardo GrecoBlazor with .net 5 - di Gerardo Greco
Blazor with .net 5 - di Gerardo Greco
 
Webkit presentazione ufficiale
Webkit presentazione ufficialeWebkit presentazione ufficiale
Webkit presentazione ufficiale
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
 

Mais de Enrico Zimuel

Password (in)security
Password (in)securityPassword (in)security
Password (in)securityEnrico Zimuel
 
Quick start on Zend Framework 2
Quick start on Zend Framework 2Quick start on Zend Framework 2
Quick start on Zend Framework 2Enrico Zimuel
 
Cryptography with Zend Framework
Cryptography with Zend FrameworkCryptography with Zend Framework
Cryptography with Zend FrameworkEnrico Zimuel
 
A quick start on Zend Framework 2
A quick start on Zend Framework 2A quick start on Zend Framework 2
A quick start on Zend Framework 2Enrico Zimuel
 
Zend Framework 2 quick start
Zend Framework 2 quick startZend Framework 2 quick start
Zend Framework 2 quick startEnrico Zimuel
 
How to scale PHP applications
How to scale PHP applicationsHow to scale PHP applications
How to scale PHP applicationsEnrico Zimuel
 
Zend_Cache: how to improve the performance of PHP applications
Zend_Cache: how to improve the performance of PHP applicationsZend_Cache: how to improve the performance of PHP applications
Zend_Cache: how to improve the performance of PHP applicationsEnrico Zimuel
 
Introduzione alle tabelle hash
Introduzione alle tabelle hashIntroduzione alle tabelle hash
Introduzione alle tabelle hashEnrico Zimuel
 
Crittografia quantistica: fantascienza o realtà?
Crittografia quantistica: fantascienza o realtà?Crittografia quantistica: fantascienza o realtà?
Crittografia quantistica: fantascienza o realtà?Enrico Zimuel
 
Introduzione alla crittografia
Introduzione alla crittografiaIntroduzione alla crittografia
Introduzione alla crittografiaEnrico Zimuel
 
Crittografia è sinonimo di sicurezza?
Crittografia è sinonimo di sicurezza?Crittografia è sinonimo di sicurezza?
Crittografia è sinonimo di sicurezza?Enrico Zimuel
 
Sviluppo di applicazioni sicure
Sviluppo di applicazioni sicureSviluppo di applicazioni sicure
Sviluppo di applicazioni sicureEnrico Zimuel
 
Misure minime di sicurezza informatica
Misure minime di sicurezza informaticaMisure minime di sicurezza informatica
Misure minime di sicurezza informaticaEnrico Zimuel
 
La sicurezza delle applicazioni in PHP
La sicurezza delle applicazioni in PHPLa sicurezza delle applicazioni in PHP
La sicurezza delle applicazioni in PHPEnrico Zimuel
 

Mais de Enrico Zimuel (16)

Password (in)security
Password (in)securityPassword (in)security
Password (in)security
 
Quick start on Zend Framework 2
Quick start on Zend Framework 2Quick start on Zend Framework 2
Quick start on Zend Framework 2
 
Cryptography with Zend Framework
Cryptography with Zend FrameworkCryptography with Zend Framework
Cryptography with Zend Framework
 
A quick start on Zend Framework 2
A quick start on Zend Framework 2A quick start on Zend Framework 2
A quick start on Zend Framework 2
 
Zend Framework 2 quick start
Zend Framework 2 quick startZend Framework 2 quick start
Zend Framework 2 quick start
 
How to scale PHP applications
How to scale PHP applicationsHow to scale PHP applications
How to scale PHP applications
 
Zend_Cache: how to improve the performance of PHP applications
Zend_Cache: how to improve the performance of PHP applicationsZend_Cache: how to improve the performance of PHP applications
Zend_Cache: how to improve the performance of PHP applications
 
Introduzione alle tabelle hash
Introduzione alle tabelle hashIntroduzione alle tabelle hash
Introduzione alle tabelle hash
 
Crittografia quantistica: fantascienza o realtà?
Crittografia quantistica: fantascienza o realtà?Crittografia quantistica: fantascienza o realtà?
Crittografia quantistica: fantascienza o realtà?
 
Introduzione alla crittografia
Introduzione alla crittografiaIntroduzione alla crittografia
Introduzione alla crittografia
 
Crittografia è sinonimo di sicurezza?
Crittografia è sinonimo di sicurezza?Crittografia è sinonimo di sicurezza?
Crittografia è sinonimo di sicurezza?
 
Sviluppo di applicazioni sicure
Sviluppo di applicazioni sicureSviluppo di applicazioni sicure
Sviluppo di applicazioni sicure
 
Misure minime di sicurezza informatica
Misure minime di sicurezza informaticaMisure minime di sicurezza informatica
Misure minime di sicurezza informatica
 
PHP e crittografia
PHP e crittografiaPHP e crittografia
PHP e crittografia
 
La sicurezza delle applicazioni in PHP
La sicurezza delle applicazioni in PHPLa sicurezza delle applicazioni in PHP
La sicurezza delle applicazioni in PHP
 
Firma digitale
Firma digitaleFirma digitale
Firma digitale
 

Zend Framework 2

  • 1. Sviluppo di applicazioni PHP con Zend Framework Le novità della versione 2.0 e stato dell'arte del progetto Enrico Zimuel (enrico@zend.com) Senior PHP Engineer, Zend Technologies Zend Framework Core Team PUG 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 ● L'architettura 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 l'implementazione di un progetto software. ● Caratteristiche di un framework: ▶ Riusabilità ▶ Standardizzazione ▶ Estensibilità ▶ Qualità del codice ▶ Sicurezza © All rights reserved. Zend Technologies, Inc.
  • 5. Vantaggi nell'utilizzo 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 d'utilizzo ● 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 (l'interprete 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 ▶ ≈ 460'000 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 ZF1 require_once 'Zend/Loader/StandardAutoloader.php'; $loader = new ZendLoaderStandardAutoloader(array( 'fallback_autoloader' => true, )); $loader->register(); © All rights reserved. Zend Technologies, Inc.
  • 25. Namespace/prefisso require_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-map return array( 'MyFooBar' => __DIR__ . '/Foo/Bar.php', ); .classmap.php require_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 all'autoloading di ZF1, senza l'utilizzo 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 set class 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 l'autodiscover 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 d'uso 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 l'ascolto (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 è un'azione che viene eseguita © All rights reserved. Zend Technologies, Inc.
  • 42. Esempio use 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 un'azione, 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 all'interno di una libreria. © All rights reserved. Zend Technologies, Inc.
  • 46. Moduli ● Il componente base di un'applicazione MVC con ZF2 è il modulo ● La struttura di un modulo è semplice: ▶ Un namespace ▶ Un'unica 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 all'interno dei moduli sono presenti: ▶ Autoloading ▶ Configurazioni di base © All rights reserved. Zend Technologies, Inc.
  • 49. index.php use 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. Controller namespace 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 vista use 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 dipendenze namespace ContactController; use ZendMailTransport, ZendMvcControllerActionController; class ContactController extends ActionController { public function setMailer(Transport $transport) { $this->transport = $transport; } } © All rights reserved. Zend Technologies, Inc.
  • 53. Configurazione return 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 d'esempio 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.