IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Requeriments

Composer utilitza PHP i per tant cal tenir instal·lat PHP al ordinador/servidor.

Per tenir PHP podeu instal·lar un servidor LAMP amb tasksel ($sudo apt-get install tasksel && sudo tasksel lamp ) però simplement amb php5-cli és suficient:

$ sudo apt-get install php5-cli php5-mcrypt mcrypt

NOTA: el paquet Mcrypt és necessari per evitar errors Error Output: PHP Notice: Use of undefined constant MCRYPT_RIJNDAEL_256 - assumed 'MCRYPT_RIJNDAEL_256' però crec només és error amb Composer i Laravel al executar composer require

Si seguiu les passes de l'apartat instal·lació també necessitareu CURL

$ sudo apt-get install curl

Instal·lació

$ cd
$ sudo apt-get install curl php5-cli
$ curl -sS https://getcomposer.org/installer | php
#!/usr/bin/env php
All settings correct for using Composer
Downloading...

Composer successfully installed to: /home/sergi/composer.phar
Use it: php composer.phar

Això us crea el fitxer:

composer.phar

Un fitxer binari de tipus PHAR (PHP archive)

Instal·lació global

$ sudo apt-get install curl
$ curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/bin/composer

NOTA: Quan vulgueu utilitzar console globalment utilitzeu $ composer global

És interessant també afegir suport per a bash autocompletion (alternativa: https://github.com/stecman/symfony-console-completion) afegint al final del fitxer ~/.bashrc:

$ joe ~/.bashrc
_composer()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    local cmd=${COMP_WORDS[0]}
    if ($cmd > /dev/null 2>&1)
    then
        COMPREPLY=( $(compgen -W "$($cmd list --raw | cut -f 1 -d " " | tr "\n" " ")" -- $cur) )
    fi
} 
complete -F _composer composer
complete -F _composer composer.phar



Instal·lació sense curl

Una alternativa d'instal·lació sense curl és:

$ sudo apt-get install curl php5-cli
$ php -r "readfile('https://getcomposer.org/installer');" | php

Utilitzant composer

L'execució habitual és:

$ php composer.phar install
Composer could not find a composer.json file in /home/sergi/composer_test
To initialize a project, please create a composer.json file as described in the http://getcomposer.org/ "Getting Started" section

Com podeu veure es requereix un fitxer de tipus JSON anomenat composer.json per utilitzar composer.

Creant una primera versió del fitxer composer.json. composer init

Executeu:

$ composer init

I s'executarà un assistent que us preguntarà la informació necessària per tal de crear una primera versió del fitxer composer.json

Instal·lar dependències segons el fitxer composer.json

Si es tracta d'un projecte que ja disposa de fitxer composer podeu instal·lar les dependències amb:

$ composer install

Si ja estan instal·lades el fitxer composer.lock ho detectarà i no realitzareu cap acció. Recordeu que composer.lock manté una llista de les versions de les dependències instal·lades.

NOTA: Vegeu composer update per actualitzar a noves versions les llibreries/dependències del vostre projecte

Tingueu en compte que si afegiu el fitxer composer.lock a git (normalment és el normal) els altres usuaris del repositori també tindràn bloquejades/forçades (locked) les versions de qui ha creat el repositori i a executat composer install.

Instal·lar una dependència i afegir al fitxer json. composer require

S'utilitza require per indicar que el projecte depèn d'una altre altre llibreria i alhora instal·lar està dependència a la carpeta /vendor i actualitzar el autoload.

$ composer require monolog/monolog
Using version ~1.13 for monolog/monolog
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing psr/log (1.0.0)
    Loading from cache

  - Installing monolog/monolog (1.13.1)
    Downloading: 100%         

monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server)
monolog/monolog suggests installing raven/raven (Allow sending log messages to a Sentry server)
monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server)
monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server)
monolog/monolog suggests installing videlalvaro/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib) 
monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required)) 
monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server)
monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB)
monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar)
Writing lock file
Generating autoload files

Observeu la versió que s'ha instal·lat. Al no dir res de la versió específicament s'instal·la la última versió. És més normal indicar la versió o algun tipus de comodi com per exemple:

$ composer require "foo/bar:1.0.0"

Instal·la versió 1.0.0 o :

$ composer require "foo/bar:1.0.*"

Llegiu els comodins possibles a:

https://getcomposer.org/doc/01-basic-usage.md#package-versions

IMPORTANT: La última versió no vol dir el master del repositori o el que es coneix a composer com dev-master!

.

Per instal·lar el codi Cutting Edge (la vertsió més recent en desenvolupament):

$ composer require monolog/monolog dev-master

O podeu instal·lar qualsevol versió especifica amb:

$ composer require monolog/monolog ""

També podeu executar un assistent amb:

$ composer require

Recursos:

Actualitzar dependències. Composer update

Executeu:

$ composer update

composer mirarà si hi ha noves versions de les dependències i les instal·larà.

IMPORTANT: Cal que tingueu en compte com heu instal·lat o definit la dependència al fitxer composer.json ja que segons el que haguéssiu posat no s'actualitzarà. Vegeu el següents exemples

Per exemple una entrada com:

"monolog/monolog": "1.0"

En aquest cas esteu especificant una versió especifica (1.0) i només s'instal·la està versió hi hagui o no noves versions.

En canvi:

"illuminate/filesystem": "~5.0",

Vegeu altres exemples i més informació a.

Podeu actualitzar només una dependència amb:

$ composer update foo/bar

També existeix:

$ composer update nothing

Que no instal·la/actualitza cap llibreria/dependència però si actualitza composer (de fet composer.lcok per adaptar-lo als canvis al fitxer composer.json)

Repositoris

Un repositori de Composer és bàsicament un origen de paquets (package source) és a dir un lloc d'on es poden obtenir paquets.

Packagist

Packagist és el repositori principal de Composer. Consulteu la web:

https://packagist.org/

On podeu consultar els paquets que existeixen i també podeu afegir un nou paquet ("Submit package")

Qualsevol projecte de codi obert es pot allotjar a Packagist

IMPORTANT: No és obligatori que els paquets estiguin a Packagist, es poden definir altres repositoris però facilita les coses ;-)

Publicar un paquet a packagist

És extremadament senzill publicar un paquet a Packagist, de fet el més "complicat" és disposar d'un repositori git amb una URL pública, per exemple un repositori github mateix és suficient.

Aneu a la web:

https://packagist.org/packages/submit

I se us demanarà la URL del repositori (ja us indica que suporta git, svn, Hg). Per ser justos realment cal fer alguna cosa més. Al repositori heu de tenir un fitxer:

composer.json

I aquest fitxer ha de tenir el nom del paquet amb l'opció name. A l'hora de posar nom al paquet heu de seguir les convencions indicades a:

https://packagist.org/about

De fet alhora de posar nom al paquet se segueix la mateixa estructura de github és a dir:

{VENDOR_NAME}/{PACKAGE_NAME}

o

{GITHUB_USER}/{PACKAGE_NAME}

Sovint el nom del vendor coincideix amb el del paquet, per exemple el paquet, per exemple:

monolog/monolog

Packagist us comprovarà si el nom del paquet està lliure i si tot és correcte i en cas afirmatiu podreu fer un submit del paquet. Ja teniu el paquet publicat!

Ara normalment voldreu gestionar altres tasques amb el paquet:

  • 1) Actualitzar packagist amb cada nou commit/push al repositori. GitHub Service Hook
  • 2) Gestionar les versions del paquet mitjançant tags

1) GitHub Service Hook

Un hook és una acció que s'executa al succeir un esdeveniment concret. Gihub suporta serveis de Hook, en el nostre cas volem actualitzar automaticament el paquet de packagist cada cop fem un push al repositori Github.

Per activar el hook primer heu d'aconseguir el API Token de Packagist a:

https://packagist.org/profile/

Feu click a Show API Token i copieu el token. Ara aneu a la URL del projecte Github, per exemple:

https://github.com/acacha/caca1

I si el projecte és vostre podeu fer click a:

Settings

i a

WebHook and services

Feu click a

Add service

i afegiu un servei:

Packagist

ara ompliu el formulari on:

  • User: poseu l'usuari de packagist. El podeu consultar a l'apartat profile
  • Token: El token que heu copiat de l'apartat profile de packagist.
  • Domain: No poseu res
  • Active: Deixeu marcat

I guardeu (boto update). Un cop guardat torneu a entrar i feu click a:

Test Service

Ara cal que feu un nou commit/push al repositori per comprovar que s'actualitza el paquet. Però quina versió del paquet? Per defecte existeix una versió a packagist anomenada dev-master que sempre conté la branca master del repositori

2) Packagist versions i etiquetes (tags)

La forma de crear altres versions del paquet es crear tags al repositori i actualitzar (o deixar que actualitzi el Hook ho faci automàticament) packagist. ls tags han de complir les polítiques de noms de versions de Composer ([1]). Noms vàlids són:

1.0.2
0.1
v1.0
v0.1

Per tant utilitzant git tags és molt senzill d'indicar les versions d'un paquet per tal que es puguin instal·lar versions especifiques del paquet mitjançant:

composer require

Badges

https://poser.pugx.org/

Composer plugins

Composer Plugins


Utilitzant amb Code Ignitier

A:

https://philsturgeon.uk/blog/2012/05/composer-with-codeigniter/

es proposa una idea que utilitza autoload. Basicament el truc es utilitzar composer "as usual" i afegir al principi del fitxer index.php de Code Igniter:

 /*
 * --------------------------------------------------------------------
 * COMPOSER AUTOLOAD
 * --------------------------------------------------------------------
 */
include_once './vendor/autoload.php';
...

Recursos

Gitignore

Fitxer .gitignore d'exemple:

composer.phar
vendor/ 
# Commit your application's lock file http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file
# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file 
  1. composer.lock

Documentació oficial

https://getcomposer.org/doc/

Desenvolupament

Desenvolupament de paquets composer

MOLT INTERESSANT: https://github.com/franzliedke/studio

Un workflow possible és:

Llista de plantilles:

Bucle infinit de desenvolupament

  • A la carpeta de desenvolupament del paquet composer:
  • Fer un commit dels canvis i pujar al repositori
  • (Opcional) crear una release (tag) del repositori i fer un push del tag. Aquest pas es pot evitar si s'utilitza dev-master per a provar el paquet
  • Al projecte que utilitza el paquet:
  • composer install/composer update

Aquest procediment és força lent i gens adequat durant el procediment de desenvolupament i proves del paquet.

Una opció alternativa és executar el comentat anteriorment un sol cop i aleshores treballar directament ja sigui de forma temporal o continua al paquet que utilitza el paquet que estem desenvolupant. Com? suposeu que el paquet que esteu desenvolupant és diu el_nostre_vendor/paquet aleshores:

$ cd projecte_utilitza_paquet_estem_desenvolupant
$ cd vendor/el_nostre_vendor/paquet

I ara fem que aquesta carpeta estigui lligada al repositori original amb (vegeu [git clone]]):

$ git clone https://PAT_TO_myrepo.com/git.git temp
$ mv temp/.git .
$ rm -rf temp
$ git status

Ara ja podem fer canvis aquí i un cop tot funcioni ok fer commits i push al nostre repositori central. És important (TODO comprovar) executar al fer canvis al codi:

$ composer dump-autoload

Vegeu també

Enllaços externs