summaryrefslogtreecommitdiffhomepage
path: root/it-it/php-composer-it.html.markdown
blob: 4e539d60dea29d4efd63062e9ee88ce87eca9b6e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
---
category: tool
tool: composer
contributors:
    - ["Brett Taylor", "https://github.com/glutnix"]
translator:
    - ["Agostino Fiscale", "https://github.com/agostinofiscale"]
lang: it-it
filename: LearnComposer-it.sh
---

[Composer](https://getcomposer.org/) è uno strumento che ti aiuta a gestire le 
dipendenze in PHP. Ti permette di dichiarare le librerie utilizzate dal tuo 
progetto e di installarle/aggiornarle per te.

# Installazione

```sh
# Se installi l'eseguibile in una cartella...
curl -sS https://getcomposer.org/installer | php
# ...dovrai utilizzare questo approccio, invocando Composer in questo modo:
php composer.phar about

# Se installi l'eseguibile nella directory ~/bin/composer
# Nota: assicurati che ~/bin si trovi nella variabile di ambiente PATH
curl -sS https://getcomposer.org/installer | php -- --install-dir=~/bin --filename=composer
```

Gli utenti Windows possono seguire le istruzioni per [installarlo su Windows](https://getcomposer.org/doc/00-intro.md#installation-windows).

## Assicuriamoci che il tutto abbia funzionato correttamente

```sh
# Controlla la versione e la lista delle opzioni disponibili
composer

# Ottieni ulteriori informazioni riguardanti le opzioni
composer help require

# Controlla se Composer ha tutto il necessario per funzionare come si deve
# e se è aggiornato correttamente all'ultima versione disponibile.
composer diagnose
composer diag # alias

# Aggiorna Composer all'ultima versione disponibile
composer self-update
composer self # alias
```

# Cominciamo ad usare Composer

Composer memorizza le dipendenze necessarie nel file `composer.json`.
Puoi editare questo file manualmente, ma è meglio che lasci che Composer se ne 
occupi per te.

```sh
# Crea un nuovo progetto nella cartella attuale
composer init
# ti verranno chieste delle domande interrative riguardanti il tuo progetto. 
# Puoi evitare di rispondere almeno che tu non stia sviluppando altri progetti 
# che che possano dipendere da questo.

# Se il file composer.json esiste già, scarichera' le dipendenze necessarie
composer install

# Scarica le dipendenze necessarie per l'ambiente di produzione
composer install --no-dev

# Aggiunge una dipendenza per l'ambiente di produzione
composer require guzzlehttp/guzzle
# automaticamente selezionera' l'ultima versione, la scarichera' e la aggiungera'
# come dipendenza nell'apposito campo del file composer.json.

composer require guzzlehttp/guzzle:6.0.*
# scarichera' l'ultima versione disponibile corrispondente al pattern (es. 6.0.2)
# e lo aggiungera' come dipendenza nell'apposito campo del file composer.json.

composer require --dev phpunit/phpunit:~4.5.0
# aggiungera' la dipendenza nell'ambiente di sviluppo utilizzando l'ultima versione
# disponibile nel range >=4.5.0 e < 4.6.0.

composer require-dev phpunit/phpunit:^4.5.0
# aggiungera' la dipendenza nell'ambiente di sviluppo utilizzando l'ultima versione
# disponibile nel range >=4.5.0 and < 5.0.

# Per ulteriori dettagli riguardo le versioni, vedi [la documentazione di Composer sulle versioni](https://getcomposer.org/doc/articles/versions.md) per ulteriori dettagli

# Per vedere quali pacchetti sono installabili e quali sono gia' stati installati
composer show

# Per vedere solo quali pacchetti sono gia' stati installati
composer show --installed

# Per trovare una dipendenza con 'mailgun' nel suo nome o nella descrizione.
composer search mailgun
```

[Packagist.org](https://packagist.org/) è il repository principale per i pacchetti
di Composer.  Cerca qui pacchetti di terze-parti utili per il tuo progetto.

## `composer.json` vs `composer.lock`

Il file `composer.json` memorizza la versione che si preferisce per ogni dipendenza,
insieme ad altre informazioni.

Il file `composer.lock` memorizza quale versione è stata scaricata per ogni
dipendenza. Non editare mai questo file.

Se includi il file `composer.lock` nella tua repository git, ogni sviluppatore
andra' a installare la versione attualmente utilizzata dal tuo progetto per
ogni dipendenza. Anche quando una nuova versione è stata rilasciata, Composer 
andra' a installare la versione registrata nel file lock.

```sh
# Se vuoi aggiornare tutte le dipendenze all'ultima versione che corrisponde al pattern descritto
composer update

# Se vuoi scaricare l'ultima versione di una particolare dipendenza:
composer update phpunit/phpunit

# Se vuoi cambiare la versione di una una dipendenza, potresti dover rimuovere
# quello attualmente selezionato, per poi richiedere quello corretto successivamente,
# attraverso i seguenti comandi:
composer remove --dev phpunit/phpunit
composer require --dev phpunit/phpunit:^5.0
```

## Autoloader

Composer crea una classe autoloader che puoi richiamare nella tua applicazione.
Puoi creare instanze delle classi tramite il loro namespace.

```php
require __DIR__ . '/vendor/autoload.php';

$mailgun = new Mailgun\Mailgun("key");
```

### PSR-4 Autoloader

Puoi aggiungere i tuoi namespace all'autoloader.

Nel file `composer.json`, aggiungi il campo "autoload":

```json
{
  "autoload": {
    "psr-4": {"Acme\\": "src/"}
  }
}
```

Questo dira' all'autoloader di controllare ogni risorsa che corrisponde al 
namespace `\Acme\` all'interno della cartella `src`.

In alternativa puoi usare [PSR-0, una Classmap o una lista di file da includere](https://getcomposer.org/doc/04-schema.md#autoload).
Inoltre e' possibile anche utilizzare `autoload-dev` dedicato all'ambiente di sviluppo.

Quando aggiungi o modifichi una chiave, dovrai ricompilare l'autoload attraverso:

```sh
composer dump-autoload
composer dump # alias

# Ottimizza i pacchetti PSR0 e PSR4 per essere caricati anche con le classmap.
# Sara' lento, ma migliorera' le performance in produzione.
composer dump-autoload --optimize --no-dev
```

# La cache di Composer

```sh
# Composer utilizzera i pacchetti scaricati anche per i progetti futuri. Per evitare che accada:
composer clear-cache
```

# Problemi? 

```sh
composer diagnose
composer self-update
composer clear-cache
```

## Argomenti che non sono stati (ancora) discussi in questo tutorial

* Creare e distribuire pacchetti personali su Packagist.org o altrove
* Pre- e post- script hooks: eseguire operazioni quando vengono eseguiti degli eventi

### References

* [Composer - Dependency Manager for PHP](https://getcomposer.org/)
* [Packagist.org](https://packagist.org/)