Stefano Corallo bio photo

Stefano Corallo

Semplicemente un altro blog su zendframework2 php jquery e tutto quello che mi viene in mente

Twitter Google+ Instagram Github

Integrare composer.phar e zendframework2 in un progetto zendframework1

In un applicazione sviluppata con zf1 ho voluto integrare composer.phar come gestore delle dipendenze, inoltre ho voluto integrare zf2 in modo da utilizzare in parallelo zf1 e zf2 ecco come:

Integrazione di composer come gestore delle dipendenze in zf1

Diciamo che la nostra applicazione zf1 sia situata nella directory in /home/devplayground/project/zf1app

Download composer

Per prima cosa è necessario scaricare la libreria composer, direttamente dalla pagina ufficiale scegliete il metodo che preferite o cliccate qui per scaricarlo direttamente. Una volta scaricato copiatelo dentro la directory del progetto /home/devplayground/project/zf1app

Integrazione di composer in una applicazione ZF1

Adesso bisogna inizializzare composer e rispondere ad una serie di domande, l’inizializzazione serve a creare il file di configurazione di composer composer.json che somiglierà più o meno a questo:

{
    "name": "devplayground/zf1app",
    "require": {
        "zendframework/zendframework1": "1.*"
    },
    "authors": [
        {
            "name": "Stefano Corallo",
            "email": ""
        }
    ],
    "minimum-stability": "dev"
}

Per inizializzare composer eseguiamo il comando init e rispondiamo alle domande:

[devplayground@localhost]$ cd /home/devplayground/project/zf1app
 [devplayground@localhost]$ php composer.phar init

finche non ci viene richiesto se vogliamo specificare delle dipendenze, quindi inseriamo zf1 nel seguente modo

...
Define your dependencies.

Would you like to define your dependencies (require) interactively [yes]? 
Search for a package []: zendframework/zendframework1

Found 15 packages matching zendframework/zendframework1

   [0] zendframework/zendframework1
   [1] bombayworks/zendframework1
   [2] zendframework/zendframework
   [3] emagister/zendframework1
   [4] guilhermeblanco/zendframework1-doctrine2
   [5] zendframework/zftool
   [6] zendframework/zendpdf
   [7] zendframework/zend-stdlib
   [8] zendframework/zend-eventmanager
   [9] zendframework/zend-servicemanager
  [10] zendframework/zend-validator
  [11] zendframework/zend-loader
  [12] zendframework/zend-code
  [13] zendframework/zend-math
  [14] zendframework/zend-developer-tools

Enter package # to add, or the complete package name if it is not listed []: 0
Enter the version constraint to require []: 1.*
Search for a package []:
Would you like to define your dev dependencies (require-dev) interactively [yes]? no

A questo punto il file composer.json è stato creato adesso scarichiamo le nostre librerie tramite il comdando install

[devplayground@localhost]$ php composer.phar install

Quando composer avrà finito di scaricare la libreria zendframework1 la troveremo nella directory vendor all’interno del nostro progetto, la struttura sarà più o meno cosi:

[devplayground@localhost]$ tree . -L 1
|-- application
|-- bin
|-- Changelog
|-- composer.json
|-- composer.lock
|-- composer.phar
|-- library
|-- public
`-- vendor
    |-- autoload.php
    |-- bin
    |-- composer
    `-- zendframework

Verifica Funzionamento

Adesso che abbiamo scaricato tramite composer la nostra libreria zendframework1, dobbiamo modificare l’applicazione zf1app in maniera tale che sia in grado di caricare la libreria, per farlo modifichiamo il file public/index.php in questo modo

Prima:

...
...
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    get_include_path(),
)));
...
...

Dopo:

...
...
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    get_include_path(),
)));
//Composer Class loading 
define('VENDOR_PATH', APPLICATION_PATH . '/../vendor');
require_once VENDOR_PATH . '/autoload.php';
...
...

A questo punto non è più necessaria la libreria di Zend installata in library/Zend perchè viene caricata quella installata tramite composer quindi possiamo eliminarla

[devplayground@localhost]$ cd /home/devplayground/project/zf1app/library
[devplayground@localhost]$ rm -rf Zend

Integrazione di ZF2 in una applicazione ZF1

Adesso per scaricare zf2 ed integrarlo nel nostro progetto zf1 è semplicissimo, utilizziamo composer

[devplayground@localhost]$ cd /home/devplayground/project/zf1app
[devplayground@localhost]$ composer require zendframework/zendframework:2.2.*
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing zendframework/zendframework (dev-master 55d43c9)
    Cloning 55d43c9c5cc7dcb698467eae42c1309fcbe66312

Writing lock file
Generating autoload files

A questo punto abbiamo installato la libreria zf2, precisamente si trova in vendor/zendframework/zendframework

La libreria viene già caricata in quanto abbiamo già modificato il file public/index.php precedentemente inserendo il classloading di composer.

A questo punto se volessimo utilizzare la Dependency Injection, detto fatto, ad esempio modifichiamo il file public/index.php subito dopo il class loading di composer:

//Composer Class loading 
define('VENDOR_PATH', APPLICATION_PATH . '/../vendor');
require_once VENDOR_PATH . '/autoload.php';

$di = new \Zend\Di\Di(); 
var_dump($di);
die();