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 initfinche 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]? noA questo punto il file composer.json è stato creato adesso scarichiamo le nostre librerie tramite il comdando install
[devplayground@localhost]$ php composer.phar installQuando 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
`-- zendframeworkVerifica 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 ZendIntegrazione 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 filesA 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.phpprecedentemente 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();