Framework di supporto allo sviluppo di applicazioni Web
pugBO #10 PSR e Composer
1. pugBO #10 PSR
e Composer
Davide Bellettini
http://twitter.com/SbiellONE
http://it.linkedin.com/in/davidebellettini/
http://www.davidebellettini.com/
2. Standard PSR: perché
● Gli sviluppatori dei framework PHP
sentivano l'esigenza di uniformità tra gli
standard
● Nasce il Framework Interop Group
● Diversi livelli di standardizzazione
○ PSR-0, PSR-1, PSR-2, PSR-3
● Ogni livello include le regole del livello
inferiore, tranne PSR-3
● Strumenti automatici di verifica (PHP-CS-
Fixer)
3. Gli standard 1/3
Le regole standardizzano:
● PSR-0: il nome dei file deve rispecchiare
quello delle classi VendorHelloCiao diventa
Vendor/Hello/Ciao.php
● PSR-1
○ Tag di apertura e di chiusura: <?php, ?>, <?=$a?>
○ Un file può contenere o dichiarazioni o side-effects,
non entrambi
○ La codifica dei file UTF-8 (no BOM)
○ Nomi delle classi, costanti e metodi
4. Gli standard 2/3
● PSR-2
○ Una riga di codice dovrebbe essere meno di 80
colonne, se più di 120 viene dato un warning
○ L'indentazione: 4 spazi, no tab, quando indentare
○ A capo con Line Feed
○ Quando mandare a capo le graffe, a capo nelle
definizioni di classi e metodi ecc
○ Spaziatura nella lista argomenti, a capo, ecc
○ Niente spazi a fine riga
○ niente ?> nei file contenenti solo PHP
○ true, false, null sempre in minuscolo
○ vietato usare var
○ ordine delle parole public, final, abstract, static
5. Gli standard 3/3
● PSR-3 (standardizzazione dei logger)
○ PsrLogLoggerInterface
■ definisce i classici metodi del logger: (debug,
info, notice, warning, error, critical, alert,
emergency).
○ LoggerAwareInterface: setLogger
○ LogLevel: costanti per i vari livelli di log
6. Composer: a cosa serve?
Composer è un sistema open source di
gestione delle dipendenze per PHP che
gestisce:
● l'installazione e l'aggiornamento le librerie
PHP pubblicate sul sito packagist.org
● il caricamento delle classi secondo lo
standard PSR-0
● i vincoli sul numero di versione e stabilità
7. Il perché del successo
● Descrittore facile da scrivere
● Rapidamente adottato da progetti importanti
del mondo PHP
● Evita la noia dei git submodules / svn
externals
● Gestisce le dipendenze transitive e i conflitti
● Grazie allo standard PSR-0 viene fornito di
autoloader
● Più semplice da usare rispetto a PEAR
8. Alcuni progetti
● Drupal 8
● Tutti i prodotti Sensio (Symfony 2.1, Twig,
Silex, ...)
● Doctrine
● Smarty
● UniversiBO
● Zend Framework
● ...
● Sempre in aumento!
9. I file in gioco
● composer.phar: l'archivio contenente il
codice PHP dell'applicazione composer
● composer.json: il descrittore dove inserire
le informazioni del progetto (nome,
sviluppatori, dipendenze, ecc)
● composer.lock: file gestito da composer
che tiene traccia delle versioni delle librerie
installate, è consigliabile metterlo sotto
controllo di versione
● vendor/autoload.php: class loader
10. Esempio di file composer
"require": {
"php": ">=5.3.3",
"symfony/symfony": "2.1.*",
"doctrine/orm": ">=2.2.3,<2.4-dev",
"doctrine/doctrine-bundle": "1.0.*",
"twig/extensions": "1.0.*",
...
}
11. Ma la libreria XYZ...
...non è su packagist.org!
Nessun problema! È sufficiente conoscere l'url
dell'archivio zip da scaricare.
http://getcomposer.org/doc/04-schema.
md#repositories
12. Ma la libreria XYZ...
... è su un repository PEAR
Nessun problema! Composer installa anche da
PEAR
http://getcomposer.org/doc/04-schema.
md#repositories
13. Non voglio pubblicare...
... le mie librerie, non voglio che siano Open
Source!
No problem! Packagist è software libero (MIT)
e puoi installarne una copia, oppure generare
un repository con Satis!
14. In pratica
Scaricamento del phar
curl -s https://getcomposer.org/installer |
php
Creazione di un nuovo composer.json passo
passo: php composer.phar init
Aggiornamento delle dipendenze
php composer.phar update
Installazione a partire da composer.lock
php composer.phar install
15. Alcuni esempi concreti
Alcuni composer.json di progetti reali.
https://github.
com/UniversiBO/UniversiBO/blob/master/comp
oser.json
https://github.
com/FriendsOfSymfony/FOSUserBundle/blob/
master/composer.json
https://github.com/symfony/symfony-
standard/blob/2.1/composer.json
16. Birra
● Tennent's
● La Frasca
● Master Beer 0 °C ?