Click here to load reader
Upload
davide-bellettini
View
959
Download
0
Embed Size (px)
Citation preview
pugBO #10 PSR e ComposerDavide Bellettini
http://twitter.com/SbiellONEhttp://it.linkedin.com/in/davidebellettini/http://www.davidebellettini.com/
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)
Gli standard 1/3Le regole standardizzano:● PSR-0: il nome dei file deve rispecchiare
quello delle classi Vendor\Hello\Ciao 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
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
Gli standard 3/3● PSR-3 (standardizzazione dei logger)
○ Psr\Log\LoggerInterface■ definisce i classici metodi del logger: (debug,
info, notice, warning, error, critical, alert, emergency).
○ LoggerAwareInterface: setLogger○ LogLevel: costanti per i vari livelli di log
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à
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
Alcuni progetti● Drupal 8● Tutti i prodotti Sensio (Symfony 2.1, Twig,
Silex, ...)● Doctrine● Smarty● UniversiBO● Zend Framework● ...● Sempre in aumento!
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
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.*", ...}
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
Ma la libreria XYZ...... è su un repository PEAR
Nessun problema! Composer installa anche da PEAR
http://getcomposer.org/doc/04-schema.md#repositories
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!
In praticaScaricamento del pharcurl -s https://getcomposer.org/installer | php
Creazione di un nuovo composer.json passo passo: php composer.phar init
Aggiornamento delle dipendenzephp composer.phar update
Installazione a partire da composer.lockphp composer.phar install
Alcuni esempi concretiAlcuni composer.json di progetti reali.https://github.com/UniversiBO/UniversiBO/blob/master/composer.jsonhttps://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/composer.jsonhttps://github.com/symfony/symfony-standard/blob/2.1/composer.json
Birra
● Tennent's● La Frasca● Master Beer 0 °C ?