{"id":11896,"date":"2016-07-26T09:59:20","date_gmt":"2016-07-26T07:59:20","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=11896"},"modified":"2016-07-26T09:59:20","modified_gmt":"2016-07-26T07:59:20","slug":"composer-gestione-delle-dipendenze-in-php","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/composer-gestione-delle-dipendenze-in-php\/","title":{"rendered":"Composer: gestione delle dipendenze in PHP"},"content":{"rendered":"<p>Ogni progetto sufficientemente articolato sfrutta funzionalit\u00e0 messe a disposizione da altre librerie. Queste dovrebbero essere scaricate ed integrate nella nostra piattaforma in maniera corretta e rispettando le dipendenze che esse, a loro volta, richiedono. Quando si programma su framework complessi, la preparazione dell&#8217;ambiente pu\u00f2 essere un&#8217;operazione delicata e molto noiosa, in grado di far perdere tempo molto prezioso. Per questo, in ogni tecnologia, esistono software appositi in grado di gestire le dipendenze al posto nostro a patto di ricevere opportuni comandi ben fatti.<\/p>\n<p>Nel mondo PHP, si \u00e8 affermato <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\">Composer<\/a>. Lo possiamo installare su una macchina in cui \u00e8 disponibile gi\u00e0 l&#8217;interprete php con il comando seguente:<\/p>\n<pre class=\"lang:sh decode:true\">curl -sS https:\/\/getcomposer.org\/installer | php<\/pre>\n<p>Da questo momento, Composer sar\u00e0 eseguibile tramite un archivio phar, formato con cui si impacchettano file scritti in PHP:<\/p>\n<pre class=\"lang:sh decode:true \">php composer.phar<\/pre>\n<p>L&#8217;elenco dei pacchetti scaricabili con Composer \u00e8 disponibile alla consultazione sul sito\u00a0<a href=\"https:\/\/packagist.org\/\" target=\"_blank\">Packagist.org<\/a>\u00a0con tanto di documentazione ed esempi pratici.<\/p>\n<p>Immaginiamo di voler installare una libreria a nostra scelta da Packagist, scegliamo, ad esempio,\u00a0<a href=\"https:\/\/packagist.org\/packages\/webmozart\/json\" target=\"_blank\">webmozart\/json<\/a>, utile per codifica e decodifica di dati in JSON. Lo chiediamo a Composer da riga di comando:<\/p>\n<pre class=\"lang:sh decode:true \">php composer.phar require webmozart\/json<\/pre>\n<p>Al termine dello scaricamento troveremo il file di configurazione creato da Composer, composer.json:<\/p>\n<pre class=\"lang:js decode:true \">{\r\n    \"require\": {\r\n        \"webmozart\/json\": \"^1.2\"\r\n    }\r\n}\r\n<\/pre>\n<p>in cui\u00a01.2 \u00e8 l&#8217;ultima versione base disponibile.<\/p>\n<p>Troveremo ora anche una cartella denominata <em>vendor<\/em> all&#8217;interno della quale ci saranno le librerie ottenute\u00a0nonch\u00e8 il file <em>autoload.php<\/em> la cui inclusione in uno script PHP mette, gi\u00e0 da solo, a disposizione tutto il materiale scaricato\u00a0inserendo\u00a0all&#8217;inizio del nostro script:<\/p>\n<pre class=\"lang:php decode:true \">require 'vendor\/autoload.php';<\/pre>\n<p>Man mano che si fa conoscenza di framework PHP, anche di dimensioni rilevanti, si scopre quanto Composer sia utile\u00a0per preparare ambienti con pochi comandi, configurati bene. Sicuramente, lo vedremo ancora all&#8217;opera nei futuri post di questo sito.<\/p>\n<p>Continuate a seguirci!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ogni progetto sufficientemente articolato sfrutta funzionalit\u00e0 messe a disposizione da altre librerie. Queste dovrebbero essere scaricate ed&#8230;<\/p>\n","protected":false},"author":561,"featured_media":12254,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[481],"tags":[1712,131,1596,1598],"class_list":["post-11896","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-risorse-utili","tag-dipendenze-php","tag-php","tag-programmatori-web","tag-web-developers"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11896","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/561"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=11896"}],"version-history":[{"count":4,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11896\/revisions"}],"predecessor-version":[{"id":12256,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11896\/revisions\/12256"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media\/12254"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=11896"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=11896"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=11896"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}