SlideShare a Scribd company logo
1 of 38
Download to read offline
Come integrare Zend
Framework in Wordpress

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



Wordpress Conference
16 Giugno 2012, Torino

                                         © All rights reserved. Zend Technologies, Inc.
Mi presento
●   Enrico Zimuel (@ezimuel)
●   Software Engineer dal 1996
●   Senior PHP Engineer presso Zend
      Technologies nel team di sviluppo di
      Zend Framework
●   Speaker in conferenze internazionali
●   Co-autore del libro “PHP best practices”
      FAG edizioni, 2012
●   Socio del GrUSP e co-fondatore del
      PUG Torino
●   Co-organizzatore PHP.TO.START



                                           2
Perchè utilizzare
un framework di
    sviluppo?




    © All rights reserved. Zend Technologies, Inc.
Non reinventare la ruota




               © All rights reserved. Zend Technologies, Inc.
Utilizzare codice di qualità




                © All rights reserved. Zend Technologies, Inc.
Ridurre il time to market




               © All rights reserved. Zend Technologies, Inc.
Zend Framework




   © All rights reserved. Zend Technologies, Inc.
Zend Framework
●
    Framework PHP per lo sviluppo di applicazioni web
       ▶   > 15 milioni di download
       ▶   > 500 sviluppatori
       ▶   > 10 milioni hits su Google
●
    Open source, licenza basata su new BSD
●
    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)
●
    http://www.zend.com




                           © All rights reserved. Zend Technologies, Inc.
Alcuni progetti basati su ZF




                © 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:
        ▶   ≈ 4000 classi, ≈ 9000 files, ≈ 91 Mb
        ▶   ≈ 460'000 linee di codice
        ▶   Reference guide > 1000 pagine

                              © All rights reserved. Zend Technologies, Inc.
Model View Controller (MVC) di 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.
La nuova versione 2.0

●
    Nuova architettura (MVC, Di, Events, Services, Modules)
●   Performance migliorate
●   Utilizzo di PHP 5.3
●   Niente più CLA (Contributor License Agreement)
●   Git (github) al posto di SVN
●
    Sistema di packaging (pyrus, composer)




                          © All rights reserved. Zend Technologies, Inc.
Versioni

●   Stabile:
       ▶   1.11.11
●
    Beta:
       ▶   2.0.0beta4
●   Prossime releases:
       ▶   1.12 (fine Giugno 2012)
       ▶   2.0.0beta5 (fine Giugno 2012)
       ▶   2.0 RC (estate 2012)


                        © All rights reserved. Zend Technologies, Inc.
Zend Framework
  e Wordpress




   © All rights reserved. Zend Technologies, Inc.
Perchè utilizzare ZF in Wordpress?
●
    Migliorare lo sviluppo dei plugin
        ▶   Ridurre l'utilizzo di variabili globali
        ▶   Utilizzo di codice OOP
        ▶   Niente più codice deprecated
●
    Gestire progetti complessi
●
    Estendere le funzionalità di Wordpress
●
    Utilizzare uno standard di programmazione
    (migliorare la gestione di un team di sviluppo)




                           © All rights reserved. Zend Technologies, Inc.
Possibili integrazioni
●
    Creazione di un semplice plugin:
        ▶   Inclusione della libreria ZF1
        ▶   Gestione dell'autoloader di ZF2
●
    Utilizzo di plugin già pronti:
        ▶   Vulnero




                          © All rights reserved. Zend Technologies, Inc.
Integrare ZF1 in
   Wordpress




    © All rights reserved. Zend Technologies, Inc.
Integrare ZF1
●
    Creare un file zf1.php in /wp-content/plugins:
    /**
     * @package ZF1
     */
    /*
    Plugin Name: ZF1
    Plugin URI: ...
    Description: Integrare Zend Framework 1 in Wordpress
    Version: 0.0.1
    Author: ...
    Author URI: ...
    License: GPLv2 or later
    */
    set_include_path(get_include_path() . PATH_SEPARATOR . 'path_to_ZF_library');
    require_once 'Zend/Loader/Autoloader.php';
    $autoloader = Zend_Loader_Autoloader::getInstance();



                               © All rights reserved. Zend Technologies, Inc.
Esempio: plugin per l'invio di email con ZF ad
ogni aggiornamento di un post
class ZFmail {
      protected $mail;

     public function __construct()
     {
       $this->mail = new Zend_Mail();
       add_action('publish_post', array($this, 'send'));
     }

     public function send($postId)
     {
       $this->mail->setBodyText("Ho appen aggiornato il blog con il post $postId");
       $this->mail->addTo('email', 'Nome destinatario');
       $this->mail->setSubject('Aggiornamento blog');
       $this->mail->send();
       return $postId;
     }
}
$zfMail = new ZFmail();


                                 © All rights reserved. Zend Technologies, Inc.
Esempio: admin panel con ZF view
●
    Creare una cartella con il nome del plugin, ad esempio
    test, in /wp-content/plugins/test
●
    Creare una sottocartella views all'interno di test
    /wp-content/plugins/test/views
●
    Inserire nella cartella views il codice HTML del pannello
    di amministrazione (file .phtml)
●
    Utilizzare l'azione admin_menu e la funzione
    add_options_page per aggiungere il pannello




                        © All rights reserved. Zend Technologies, Inc.
Esempio: admin panel plugin
class ZFAdminPanel {
      protected $view;
      public function __construct() {
        $this->view = new Zend_View();
        $this->view->setScriptPath(dirname(__FILE__) . '/views');
        add_action('admin_menu', array($this,'admin_menu'));
        add_action('admin_init', array($this,'register_options'));
      }
      public function admin_menu() {
        add_options_page('example', 'example', 'administrator', __FILE__,
                            array($this,'settings_page'));
      }
      public function settings_page() {
        echo $this->view->render('settings.phtml');
      }
      public function register_options() {
        register_setting('zfexample-settings-group', 'zfexample_option' );
      }
}
$zfAdminPanel = new ZFAdminPanel();

                                © All rights reserved. Zend Technologies, Inc.
Esempio: settings.phtml

 <div class="wrap">
    <h2><?php _e('Example', 'zfexample') ?></h2>
    <form method="post" action="options.php">
       <?php settings_fields( 'zfexample-settings-group' ); ?>
       <table class="form-table">
          <tr valign="top">
             <th scope="row"><?php _e('Option', 'zfexample') ?></th>
             <td><input type="text" name="zfexample_option" value="<?php echo
 get_option('zfexample_option'); ?>" /></td>
          </tr>
       </table>
       <p class="submit">
          <input type="submit" class="button-primary" value="<?php _e('Save Changes',
 'zfexample') ?>" />
       </p>
    </form>
 </div>



                               © All rights reserved. Zend Technologies, Inc.
Example panel




                © All rights reserved. Zend Technologies, Inc.
Integrare ZF2 in
   Wordpress




    © All rights reserved. Zend Technologies, Inc.
Integrare ZF2
●
    Creare un file zf2.php in /wp-content/plugins:
    /**
     * @package ZF2
     */
    /*
    Plugin Name: ZF2
    Plugin URI: ...
    Description: Integrare Zend Framework 2 in Wordpress
    Version: 0.0.1
    Author: ...
    Author URI: ...
    License: GPLv2 or later
    */
    require_once 'path_to_zf2_library/Zend/Loader/StandardAutoloader.php';
    $loader = new ZendLoaderStandardAutoloader(array(
        'fallback_autoloader' => true,
    ));
    $loader->register();


                               © All rights reserved. Zend Technologies, Inc.
Utilizzo del
plugin Vulnero




   © All rights reserved. Zend Technologies, Inc.
Vulnero
●
    Un plugin per l'utilizzo di Zend Framework
    all'interno di Wordpress
●
    Open source (licenza BSD-2)
●
    Integrato con le API di Wordpress
●
    http://www.vulnero.com/
●   Sorgenti: https://github.com/andrew-kandels/vulnero




                       © All rights reserved. Zend Technologies, Inc.
Cosa offre Vulnero
●
    Esegue il bootstrap delle funzionalità di Zend
    Framework in Wordpress
●
    Offre uno strumento di sviluppo rapido basato sulla
    piattaforma di content management di Wordpress
●
    Più di una semplice integrazione con ZF




                      © All rights reserved. Zend Technologies, Inc.
Vulnero: funzionalità
●
    Bootstrapping (Zend_Application)
●
    Routing Requests (Zend_Router_Route)
●
    View Scripts (Zend_View)
●
    Configuration (Zend_Config)
●   Caching (Zend_Cache)
●   Database (Zend_Db)
●   Authentication (Zend_Auth)




                     © All rights reserved. Zend Technologies, Inc.
Esempio: routing

     myapp.type=Zend_Controller_Router_Route
     myapp.type=Zend_Controller_Router_Route
     myapp.route=myapp/:controller/:action
     myapp.route=myapp/:controller/:action
     myapp.defaults.module=default
     myapp.defaults.module=default
     myapp.defaults.controller=index
     myapp.defaults.controller=index
     myapp.defaults.action=index
     myapp.defaults.action=index

●
    Il routing dell'applicazione ha la precedenza
●
    Le rotte non trovate vengono gestite da Wordpress
●
    Le richieste vengono gestite tramite
    controller/action tipiche di Zend Framework


                      © All rights reserved. Zend Technologies, Inc.
Layout condivisi

●   I layout di Wordpress vengono gestiti tramite
    Zend_Layout
●   Vantaggi:
       ▶   Riutilizzo di migliaia di layout Wordpress
       ▶   Separazione del codice HTML (vista) con il
             codice PHP (business logic)




                       © All rights reserved. Zend Technologies, Inc.
Esempio: widget
Controller
// application/widgets/Widget/SampleBox.php
 // application/widgets/Widget/SampleBox.php
class Widget_SampleBox {{
 class Widget_SampleBox
   // The widget's title (required)
    // The widget's title (required)
   protected $_title = 'Sample Widget Box';
    protected $_title = 'Sample Widget Box';

     // Shown in the administration panel
      // Shown in the administration panel
     protected $_description = 'This is a sample widget.';
      protected $_description = 'This is a sample widget.';

     public function displayAction(array $settings) {{
      public function displayAction(array $settings)
        $this->view->version = VULNERO_VERSION;
         $this->view->version = VULNERO_VERSION;
     }}
}}

                                                                                    View
                                // application/views/scripts/widgets/sample-box.phtml
                                 // application/views/scripts/widgets/sample-box.phtml
                                Hello world, this is a sample widget!
                                 Hello world, this is a sample widget!


                                   © All rights reserved. Zend Technologies, Inc.
Esempio: integrazione con le API di Wordpress

class MyController extends Zend_Controller_Action {{
 class MyController extends Zend_Controller_Action

     public function indexAction() {{
     public function indexAction()
       $wp = $this->getInvokeArg('bootstrap')
        $wp = $this->getInvokeArg('bootstrap')
                   ->bootstrap('wordPress')
                    ->bootstrap('wordPress')
                   ->getResource('wordPress');
                    ->getResource('wordPress');

          if (!$colors = $wp->getCustomOptions('my-colors')) {{
           if (!$colors = $wp->getCustomOptions('my-colors'))
              $colors = array('red', 'blue');
               $colors = array('red', 'blue');
              $wp->setCustomOption('my-colors', $colors);
               $wp->setCustomOption('my-colors', $colors);
          }}

          $this->view->colors = $colors;
           $this->view->colors = $colors;
     }}
}}

                               © All rights reserved. Zend Technologies, Inc.
Riferimenti
●   Zend Framework, http://framework.zend.com/
●   R. Allen, N. Lo, S. Brown, Zend Framework in Action, Manning
    Publications, 2009
●   Writing a Wordpress plugin,
    http://codex.wordpress.org/Writing_a_Plugin
●
    B. Williams, O. Richard, J. Tadlock, Professional WordPress Plugin
    Development, Wrox 2011
●
    H. Stern, D. Damstra, B. Williams, Professional WordPress, Wrox
    2010
●
    A. Kandels, Introducing a Zend Framework library that allows you
    develop applications on top of WordPress, Slideshare
    http://slidesha.re/LqT3yD


                          © All rights reserved. Zend Technologies, Inc.
Grazie!

Per ulteriori informazioni:
enrico@zend.com


http://framework.zend.com/
http://www.zend.com




                 © All rights reserved. Zend Technologies, Inc.

More Related Content

What's hot

Zend Framework Workshop Parte1
Zend Framework Workshop Parte1Zend Framework Workshop Parte1
Zend Framework Workshop Parte1massimiliano.wosz
 
Zend Framework Workshop Parte2
Zend Framework Workshop Parte2Zend Framework Workshop Parte2
Zend Framework Workshop Parte2massimiliano.wosz
 
Modern web development with python and Web2py
Modern web development with python and Web2pyModern web development with python and Web2py
Modern web development with python and Web2pyDavide Marzioni
 
Deno - L'anagramma di node
Deno - L'anagramma di nodeDeno - L'anagramma di node
Deno - L'anagramma di nodeFrancesco Sciuti
 
Liferay & Salesforce.com
Liferay & Salesforce.comLiferay & Salesforce.com
Liferay & Salesforce.comAntonio Musarra
 
Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Eugenio Minardi
 
Marco Rho: Magento theme development workflow con Grunt
Marco Rho: Magento theme development workflow con GruntMarco Rho: Magento theme development workflow con Grunt
Marco Rho: Magento theme development workflow con GruntMeet Magento Italy
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webLuca Milan
 

What's hot (11)

Zend Framework Workshop Parte1
Zend Framework Workshop Parte1Zend Framework Workshop Parte1
Zend Framework Workshop Parte1
 
Web frameworks
Web frameworksWeb frameworks
Web frameworks
 
Zend Framework Workshop Parte2
Zend Framework Workshop Parte2Zend Framework Workshop Parte2
Zend Framework Workshop Parte2
 
Modern web development with python and Web2py
Modern web development with python and Web2pyModern web development with python and Web2py
Modern web development with python and Web2py
 
Deno - L'anagramma di node
Deno - L'anagramma di nodeDeno - L'anagramma di node
Deno - L'anagramma di node
 
Liferay & Salesforce.com
Liferay & Salesforce.comLiferay & Salesforce.com
Liferay & Salesforce.com
 
Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS
 
Marco Rho: Magento theme development workflow con Grunt
Marco Rho: Magento theme development workflow con GruntMarco Rho: Magento theme development workflow con Grunt
Marco Rho: Magento theme development workflow con Grunt
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni web
 
Powerful asp.net 4 e ie9
Powerful asp.net 4 e ie9Powerful asp.net 4 e ie9
Powerful asp.net 4 e ie9
 
Creare PWA con Angular
Creare PWA con AngularCreare PWA con Angular
Creare PWA con Angular
 

Similar to Integrare Zend Framework in Wordpress

Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018Marco Chiesi
 
Slide Mulesoft Meetup Milano #10.pdf
Slide Mulesoft Meetup Milano #10.pdfSlide Mulesoft Meetup Milano #10.pdf
Slide Mulesoft Meetup Milano #10.pdfFlorence Consulting
 
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
 
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
 
Simple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingSimple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingFrancesca1980
 
Link. php [santi caltabiano]
  Link. php [santi caltabiano]  Link. php [santi caltabiano]
Link. php [santi caltabiano]santi caltabiano
 
Linux Embedded per l'automazione
Linux Embedded per l'automazioneLinux Embedded per l'automazione
Linux Embedded per l'automazioneDaniele Costarella
 
Gaetano Giunta: introduzione agli eZ components
Gaetano Giunta: introduzione agli eZ componentsGaetano Giunta: introduzione agli eZ components
Gaetano Giunta: introduzione agli eZ componentsFrancesco Fullone
 
Introduzione ad ASP.NET Core
Introduzione ad ASP.NET CoreIntroduzione ad ASP.NET Core
Introduzione ad ASP.NET CoreAndrea Dottor
 
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANODrupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANODrupalDay
 

Similar to Integrare Zend Framework in Wordpress (20)

Zend Framework 2
Zend Framework 2Zend Framework 2
Zend Framework 2
 
Pro php refactoring
Pro php refactoringPro php refactoring
Pro php refactoring
 
Modernizziamo IBM i con PHP
Modernizziamo IBM i con PHPModernizziamo IBM i con PHP
Modernizziamo IBM i con PHP
 
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
 
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
 
Il testing con zend framework
Il testing con zend frameworkIl testing con zend framework
Il testing con zend framework
 
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
 
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
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
 
Simple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingSimple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computing
 
Grasso Frameworks Ajax
Grasso Frameworks AjaxGrasso Frameworks Ajax
Grasso Frameworks Ajax
 
Link. php [santi caltabiano]
  Link. php [santi caltabiano]  Link. php [santi caltabiano]
Link. php [santi caltabiano]
 
Linux Embedded per l'automazione
Linux Embedded per l'automazioneLinux Embedded per l'automazione
Linux Embedded per l'automazione
 
Gaetano Giunta: introduzione agli eZ components
Gaetano Giunta: introduzione agli eZ componentsGaetano Giunta: introduzione agli eZ components
Gaetano Giunta: introduzione agli eZ components
 
TuxIsAlive
TuxIsAliveTuxIsAlive
TuxIsAlive
 
Zendframework Parte2
Zendframework    Parte2Zendframework    Parte2
Zendframework Parte2
 
Standard Dev Workflow
Standard Dev WorkflowStandard Dev Workflow
Standard Dev Workflow
 
Introduzione ad ASP.NET Core
Introduzione ad ASP.NET CoreIntroduzione ad ASP.NET Core
Introduzione ad ASP.NET Core
 
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANODrupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANO
 

More from 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
 
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
 
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
 
Cryptography in PHP: use cases
Cryptography in PHP: use casesCryptography in PHP: use cases
Cryptography in PHP: use casesEnrico Zimuel
 
Manage cloud infrastructures in PHP using Zend Framework 2 (and 1)
Manage cloud infrastructures in PHP using Zend Framework 2 (and 1)Manage cloud infrastructures in PHP using Zend Framework 2 (and 1)
Manage cloud infrastructures in PHP using Zend Framework 2 (and 1)Enrico Zimuel
 
Manage cloud infrastructures using Zend Framework 2 (and ZF1)
Manage cloud infrastructures using Zend Framework 2 (and ZF1)Manage cloud infrastructures using Zend Framework 2 (and ZF1)
Manage cloud infrastructures using Zend Framework 2 (and ZF1)Enrico Zimuel
 
Strong cryptography in PHP
Strong cryptography in PHPStrong cryptography in PHP
Strong cryptography in PHPEnrico 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
 
XCheck a benchmark checker for XML query processors
XCheck a benchmark checker for XML query processorsXCheck a benchmark checker for XML query processors
XCheck a benchmark checker for XML query processorsEnrico 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
 

More from Enrico Zimuel (20)

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
 
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
 
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
 
Cryptography in PHP: use cases
Cryptography in PHP: use casesCryptography in PHP: use cases
Cryptography in PHP: use cases
 
Manage cloud infrastructures in PHP using Zend Framework 2 (and 1)
Manage cloud infrastructures in PHP using Zend Framework 2 (and 1)Manage cloud infrastructures in PHP using Zend Framework 2 (and 1)
Manage cloud infrastructures in PHP using Zend Framework 2 (and 1)
 
Manage cloud infrastructures using Zend Framework 2 (and ZF1)
Manage cloud infrastructures using Zend Framework 2 (and ZF1)Manage cloud infrastructures using Zend Framework 2 (and ZF1)
Manage cloud infrastructures using Zend Framework 2 (and ZF1)
 
Strong cryptography in PHP
Strong cryptography in PHPStrong cryptography in PHP
Strong cryptography in PHP
 
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
 
XCheck a benchmark checker for XML query processors
XCheck a benchmark checker for XML query processorsXCheck a benchmark checker for XML query processors
XCheck a benchmark checker for XML query processors
 
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
 

Integrare Zend Framework in Wordpress

  • 1. Come integrare Zend Framework in Wordpress Enrico Zimuel (enrico@zend.com) Senior PHP Engineer, Zend Technologies Zend Framework Core Team Wordpress Conference 16 Giugno 2012, Torino © All rights reserved. Zend Technologies, Inc.
  • 2. Mi presento ● Enrico Zimuel (@ezimuel) ● Software Engineer dal 1996 ● Senior PHP Engineer presso Zend Technologies nel team di sviluppo di Zend Framework ● Speaker in conferenze internazionali ● Co-autore del libro “PHP best practices” FAG edizioni, 2012 ● Socio del GrUSP e co-fondatore del PUG Torino ● Co-organizzatore PHP.TO.START 2
  • 3. Perchè utilizzare un framework di sviluppo? © All rights reserved. Zend Technologies, Inc.
  • 4. Non reinventare la ruota © All rights reserved. Zend Technologies, Inc.
  • 5. Utilizzare codice di qualità © All rights reserved. Zend Technologies, Inc.
  • 6. Ridurre il time to market © All rights reserved. Zend Technologies, Inc.
  • 7. Zend Framework © All rights reserved. Zend Technologies, Inc.
  • 8. Zend Framework ● Framework PHP per lo sviluppo di applicazioni web ▶ > 15 milioni di download ▶ > 500 sviluppatori ▶ > 10 milioni hits su Google ● Open source, licenza basata su new BSD ● http://framework.zend.com ● © Zend Technologies Ltd. © All rights reserved. Zend Technologies, Inc.
  • 9. 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) ● http://www.zend.com © All rights reserved. Zend Technologies, Inc.
  • 10. Alcuni progetti basati su ZF © All rights reserved. Zend Technologies, Inc.
  • 11. 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: ▶ ≈ 4000 classi, ≈ 9000 files, ≈ 91 Mb ▶ ≈ 460'000 linee di codice ▶ Reference guide > 1000 pagine © All rights reserved. Zend Technologies, Inc.
  • 12. Model View Controller (MVC) di ZF © All rights reserved. Zend Technologies, Inc.
  • 13. Componenti del progetto ZF 1 © All rights reserved. Zend Technologies, Inc.
  • 14. 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.
  • 15. La nuova versione 2.0 ● Nuova architettura (MVC, Di, Events, Services, Modules) ● Performance migliorate ● Utilizzo di PHP 5.3 ● Niente più CLA (Contributor License Agreement) ● Git (github) al posto di SVN ● Sistema di packaging (pyrus, composer) © All rights reserved. Zend Technologies, Inc.
  • 16. Versioni ● Stabile: ▶ 1.11.11 ● Beta: ▶ 2.0.0beta4 ● Prossime releases: ▶ 1.12 (fine Giugno 2012) ▶ 2.0.0beta5 (fine Giugno 2012) ▶ 2.0 RC (estate 2012) © All rights reserved. Zend Technologies, Inc.
  • 17. Zend Framework e Wordpress © All rights reserved. Zend Technologies, Inc.
  • 18. Perchè utilizzare ZF in Wordpress? ● Migliorare lo sviluppo dei plugin ▶ Ridurre l'utilizzo di variabili globali ▶ Utilizzo di codice OOP ▶ Niente più codice deprecated ● Gestire progetti complessi ● Estendere le funzionalità di Wordpress ● Utilizzare uno standard di programmazione (migliorare la gestione di un team di sviluppo) © All rights reserved. Zend Technologies, Inc.
  • 19. Possibili integrazioni ● Creazione di un semplice plugin: ▶ Inclusione della libreria ZF1 ▶ Gestione dell'autoloader di ZF2 ● Utilizzo di plugin già pronti: ▶ Vulnero © All rights reserved. Zend Technologies, Inc.
  • 20. Integrare ZF1 in Wordpress © All rights reserved. Zend Technologies, Inc.
  • 21. Integrare ZF1 ● Creare un file zf1.php in /wp-content/plugins: /** * @package ZF1 */ /* Plugin Name: ZF1 Plugin URI: ... Description: Integrare Zend Framework 1 in Wordpress Version: 0.0.1 Author: ... Author URI: ... License: GPLv2 or later */ set_include_path(get_include_path() . PATH_SEPARATOR . 'path_to_ZF_library'); require_once 'Zend/Loader/Autoloader.php'; $autoloader = Zend_Loader_Autoloader::getInstance(); © All rights reserved. Zend Technologies, Inc.
  • 22. Esempio: plugin per l'invio di email con ZF ad ogni aggiornamento di un post class ZFmail { protected $mail; public function __construct() { $this->mail = new Zend_Mail(); add_action('publish_post', array($this, 'send')); } public function send($postId) { $this->mail->setBodyText("Ho appen aggiornato il blog con il post $postId"); $this->mail->addTo('email', 'Nome destinatario'); $this->mail->setSubject('Aggiornamento blog'); $this->mail->send(); return $postId; } } $zfMail = new ZFmail(); © All rights reserved. Zend Technologies, Inc.
  • 23. Esempio: admin panel con ZF view ● Creare una cartella con il nome del plugin, ad esempio test, in /wp-content/plugins/test ● Creare una sottocartella views all'interno di test /wp-content/plugins/test/views ● Inserire nella cartella views il codice HTML del pannello di amministrazione (file .phtml) ● Utilizzare l'azione admin_menu e la funzione add_options_page per aggiungere il pannello © All rights reserved. Zend Technologies, Inc.
  • 24. Esempio: admin panel plugin class ZFAdminPanel { protected $view; public function __construct() { $this->view = new Zend_View(); $this->view->setScriptPath(dirname(__FILE__) . '/views'); add_action('admin_menu', array($this,'admin_menu')); add_action('admin_init', array($this,'register_options')); } public function admin_menu() { add_options_page('example', 'example', 'administrator', __FILE__, array($this,'settings_page')); } public function settings_page() { echo $this->view->render('settings.phtml'); } public function register_options() { register_setting('zfexample-settings-group', 'zfexample_option' ); } } $zfAdminPanel = new ZFAdminPanel(); © All rights reserved. Zend Technologies, Inc.
  • 25. Esempio: settings.phtml <div class="wrap"> <h2><?php _e('Example', 'zfexample') ?></h2> <form method="post" action="options.php"> <?php settings_fields( 'zfexample-settings-group' ); ?> <table class="form-table"> <tr valign="top"> <th scope="row"><?php _e('Option', 'zfexample') ?></th> <td><input type="text" name="zfexample_option" value="<?php echo get_option('zfexample_option'); ?>" /></td> </tr> </table> <p class="submit"> <input type="submit" class="button-primary" value="<?php _e('Save Changes', 'zfexample') ?>" /> </p> </form> </div> © All rights reserved. Zend Technologies, Inc.
  • 26. Example panel © All rights reserved. Zend Technologies, Inc.
  • 27. Integrare ZF2 in Wordpress © All rights reserved. Zend Technologies, Inc.
  • 28. Integrare ZF2 ● Creare un file zf2.php in /wp-content/plugins: /** * @package ZF2 */ /* Plugin Name: ZF2 Plugin URI: ... Description: Integrare Zend Framework 2 in Wordpress Version: 0.0.1 Author: ... Author URI: ... License: GPLv2 or later */ require_once 'path_to_zf2_library/Zend/Loader/StandardAutoloader.php'; $loader = new ZendLoaderStandardAutoloader(array( 'fallback_autoloader' => true, )); $loader->register(); © All rights reserved. Zend Technologies, Inc.
  • 29. Utilizzo del plugin Vulnero © All rights reserved. Zend Technologies, Inc.
  • 30. Vulnero ● Un plugin per l'utilizzo di Zend Framework all'interno di Wordpress ● Open source (licenza BSD-2) ● Integrato con le API di Wordpress ● http://www.vulnero.com/ ● Sorgenti: https://github.com/andrew-kandels/vulnero © All rights reserved. Zend Technologies, Inc.
  • 31. Cosa offre Vulnero ● Esegue il bootstrap delle funzionalità di Zend Framework in Wordpress ● Offre uno strumento di sviluppo rapido basato sulla piattaforma di content management di Wordpress ● Più di una semplice integrazione con ZF © All rights reserved. Zend Technologies, Inc.
  • 32. Vulnero: funzionalità ● Bootstrapping (Zend_Application) ● Routing Requests (Zend_Router_Route) ● View Scripts (Zend_View) ● Configuration (Zend_Config) ● Caching (Zend_Cache) ● Database (Zend_Db) ● Authentication (Zend_Auth) © All rights reserved. Zend Technologies, Inc.
  • 33. Esempio: routing myapp.type=Zend_Controller_Router_Route myapp.type=Zend_Controller_Router_Route myapp.route=myapp/:controller/:action myapp.route=myapp/:controller/:action myapp.defaults.module=default myapp.defaults.module=default myapp.defaults.controller=index myapp.defaults.controller=index myapp.defaults.action=index myapp.defaults.action=index ● Il routing dell'applicazione ha la precedenza ● Le rotte non trovate vengono gestite da Wordpress ● Le richieste vengono gestite tramite controller/action tipiche di Zend Framework © All rights reserved. Zend Technologies, Inc.
  • 34. Layout condivisi ● I layout di Wordpress vengono gestiti tramite Zend_Layout ● Vantaggi: ▶ Riutilizzo di migliaia di layout Wordpress ▶ Separazione del codice HTML (vista) con il codice PHP (business logic) © All rights reserved. Zend Technologies, Inc.
  • 35. Esempio: widget Controller // application/widgets/Widget/SampleBox.php // application/widgets/Widget/SampleBox.php class Widget_SampleBox {{ class Widget_SampleBox // The widget's title (required) // The widget's title (required) protected $_title = 'Sample Widget Box'; protected $_title = 'Sample Widget Box'; // Shown in the administration panel // Shown in the administration panel protected $_description = 'This is a sample widget.'; protected $_description = 'This is a sample widget.'; public function displayAction(array $settings) {{ public function displayAction(array $settings) $this->view->version = VULNERO_VERSION; $this->view->version = VULNERO_VERSION; }} }} View // application/views/scripts/widgets/sample-box.phtml // application/views/scripts/widgets/sample-box.phtml Hello world, this is a sample widget! Hello world, this is a sample widget! © All rights reserved. Zend Technologies, Inc.
  • 36. Esempio: integrazione con le API di Wordpress class MyController extends Zend_Controller_Action {{ class MyController extends Zend_Controller_Action public function indexAction() {{ public function indexAction() $wp = $this->getInvokeArg('bootstrap') $wp = $this->getInvokeArg('bootstrap') ->bootstrap('wordPress') ->bootstrap('wordPress') ->getResource('wordPress'); ->getResource('wordPress'); if (!$colors = $wp->getCustomOptions('my-colors')) {{ if (!$colors = $wp->getCustomOptions('my-colors')) $colors = array('red', 'blue'); $colors = array('red', 'blue'); $wp->setCustomOption('my-colors', $colors); $wp->setCustomOption('my-colors', $colors); }} $this->view->colors = $colors; $this->view->colors = $colors; }} }} © All rights reserved. Zend Technologies, Inc.
  • 37. Riferimenti ● Zend Framework, http://framework.zend.com/ ● R. Allen, N. Lo, S. Brown, Zend Framework in Action, Manning Publications, 2009 ● Writing a Wordpress plugin, http://codex.wordpress.org/Writing_a_Plugin ● B. Williams, O. Richard, J. Tadlock, Professional WordPress Plugin Development, Wrox 2011 ● H. Stern, D. Damstra, B. Williams, Professional WordPress, Wrox 2010 ● A. Kandels, Introducing a Zend Framework library that allows you develop applications on top of WordPress, Slideshare http://slidesha.re/LqT3yD © All rights reserved. Zend Technologies, Inc.