Composer es un administrador de paquetes flexible, simple y que se encarga de la administración de dependencias de nuestro proyecto. Está inspirado en npm de node.js y Bundler de Ruby.
Composer ha cambiado la comunidad PHP y está reinventado la forma de trabajar con PHP.
Gracias a Composer la comunidad PHP es más feliz y podrá dejar de reinventar la rueda una y otra vez.
7. ¿Q(. $- C!"p#$r?
“Composer es una herramienta para la gestión de dependencias en
aplicaciones PHP que permite definir las librerías de las que depende
nuestro proyecto y se encarga de instalarlas de forma automática.”
8. ¿Q(. $- C!"p#$r?
“Composer es una herramienta para la gestión de dependencias en
aplicaciones PHP que permite definir las librerías de las que depende
nuestro proyecto y se encarga de instalarlas de forma automática.”
• 1ª released el 1 de Marzo de 2012
9. ¿Q(. $- C!"p#$r?
“Composer es una herramienta para la gestión de dependencias en
aplicaciones PHP que permite definir las librerías de las que depende
nuestro proyecto y se encarga de instalarlas de forma automática.”
• 1ª released el 1 de Marzo de 2012
• Se inspira en NPM o Bundler
10. ¿Q(. $- C!"p#$r?
“Composer es una herramienta para la gestión de dependencias en
aplicaciones PHP que permite definir las librerías de las que depende
nuestro proyecto y se encarga de instalarlas de forma automática.”
• 1ª released el 1 de Marzo de 2012
• Se inspira en NPM o Bundler
• 100% PHP
11. ¿Q(. $- C!"p#$r?
“Composer es una herramienta para la gestión de dependencias en
aplicaciones PHP que permite definir las librerías de las que depende
nuestro proyecto y se encarga de instalarlas de forma automática.”
• 1ª released el 1 de Marzo de 2012
• Se inspira en NPM o Bundler
• 100% PHP
• Utiliza componentes de Symfony :)
12. ¿Q(. $- C!"p#$r?
“Composer es una herramienta para la gestión de dependencias en
aplicaciones PHP que permite definir las librerías de las que depende
nuestro proyecto y se encarga de instalarlas de forma automática.”
• 1ª released el 1 de Marzo de 2012
• Se inspira en NPM o Bundler
• 100% PHP
• Utiliza componentes de Symfony :)
• Permite autocargar nuestros paquetes
13. ¿Q(. $- C!"p#$r?
“Composer es una herramienta para la gestión de dependencias en
aplicaciones PHP que permite definir las librerías de las que depende
nuestro proyecto y se encarga de instalarlas de forma automática.”
• 1ª released el 1 de Marzo de 2012
• Se inspira en NPM o Bundler
• 100% PHP
• Utiliza componentes de Symfony :)
• Permite autocargar nuestros paquetes
• Muy simple de instalar y utilizar
14. ¿Q(. !)(rr$ )!% PEAR?
PEAR fue y sigue siendo una opción viable, sin embargo, ha sido
abandonada por muchos desarrolladores de PHP en los últimos años.
Algunas razones:
• Trabaja a nivel global de sistema
• Una versión por paquete y máquina
• Sólo dist, no source
• No permite diferentes orígenes
• Dificultad para aportar nuevo paquetes
• Gran número de paquetes desactualizados
20. D$2%*$%'! '$p$%'$%)*,-
Las dependencias se definen en un archivo llamado composer.json
Este fichero tiene que estar situado en la carpeta raíz del proyecto
$ cd ~/proyecto
$ vim composer.json
21. D$2%*$%'! '$p$%'$%)*,-
Las dependencias se definen en un archivo llamado composer.json
Este fichero tiene que estar situado en la carpeta raíz del proyecto
$ cd ~/proyecto
$ vim composer.json
Nombre del paquete
‘creador’/’proyecto’
22. D$2%*$%'! '$p$%'$%)*,-
Las dependencias se definen en un archivo llamado composer.json
Este fichero tiene que estar situado en la carpeta raíz del proyecto
$ cd ~/proyecto
$ vim composer.json
Nombre del paquete
‘creador’/’proyecto’
Versión
23. D$2%*$%'! '$p$%'$%)*,-
También es posible generar las dependencias de forma interactiva.
$ composer init
Al ejecutar el comando init, tendrás que contestar varias preguntas
cuyos valores se emplean para rellenar las opciones del archivo
composer.json
$ composer require silex/silex “~1.2”
Añade nuevas dependencias en el archivo composer.json y además
instala o actualiza las dependencias
24. V$r-*!%$- '$ p,q($&$-
1.2.3 : Versión específica, indica exactamente una versión.
>=1.0,<2.0 : Rango de versiones, operadores (>, >=, <, <=, !=)
1.0.* : Comodines, indican la versión requerida con un comodín (*)
~1.2 : Siguiente versión significativa, es equivalente a >=1.2,<2.0
36. C!"p#$r./!)3
Después de instalar las dependencias, composer crea un archivo con
las versiones exactas que ha instalado de cada librería.
$ composer install
Usará composer.lock, si no existe utilizará
composer.json y generará a composer.lock
$ composer update Usará composer.json y actualizará
composer.lock
Versiona composer.lock en tu repositorio de código. Cualquier
persona involucrada en el proyecto trabajará con las mismas
versiones.
40. 5p! '$ r$p#*&!r*! C!"p#$r
Packagist
• Por defecto es el único que está disponible
• Es el repositorio central de Composer
• Actúa de proxy entre repositorios VCS y usuarios Composer
• Lugar donde encontrar librerías para tu proyecto
• Es de software libre, por lo que lo puedes instalar en tu servidor
Es posible desactivar este repositorio:
41. 5p! '$ r$p#*&!r*! C!"p#$r
Satis
Es una versión ultra-ligera y ultra-simplificada de Packagist. Ideal para
proyectos privados, es muy fácil de usar.
46. C!"! )r$,r (% p,q($&$ *%-&,/,b/$
1. Creamos un fichero composer.json con la configuración
del paquete
2. Subimos el código a un repositorio, por ejemplo github
3. Nos creamos una cuenta en Packagist.org y registramos
nuestra librería diciéndole donde está el repositorio del
código.
4. ¡Ya podemos utilizar el paquete en nuestros proyectos!
49. )!"p#$r.6-!%
Indica el tipo de paquete, que por defecto
se establece a library.
Soporta por defecto 4 tipos:
• library
• project
• metapackage
• composer-installer
57. PHP-FIG
PHP-FIG: PHP Framework Interop Group
Es un grupo desarrolladores y representantes de la comunidad PHP, que se
han unido con el ánimo de unificar el ecosistema de frameworks, librerías,
componentes y aplicaciones desarrolladas en PHP.
PSR es la sigla de PHP Standards Recommendation
• PSR-0: Autoloading Stándard
• PSR-1: Basic Coding Standard
• PSR-2: Coding Style Guide
• PSR-3: Logger Interface
• PSR-4: Improved Autoloading
http://www.php-fig.org
59. 5p# '$ A(&!/!,'*%4
Autoload PSR-0
Por ejemplo PHPCaceresMylibraryClass.php se ubicaría en:
vendor/nombre_paquete/src/PhpCaceres/Library/Class.php
Algunos paquetes necesitan la propiedad
"target-dir": "Symfony/Component/Yaml"
60. 5p# '$ A(&!/!,'*%4
Autoload PSR-4 (tipo recomendado)
Por ejemplo PHPCaceresMylibraryClass.php se ubicaría en:
vendor/nombre_paquete/Class.php
64. Op&*"0,%'! /, ,(&!),r4,
Es posible mejorar el rendimiento de la aplicación
convirtiendo la carga automática de clases de PSR-0 y
PSR-4 en un mapa de clases.
$ composer dump-autoload -o
También puedes hacerlo con los comandos install y update
$ composer install -o
$ composer update -o
66. V$r-*+% '$/ P,q($&$
Semantic versioning (http://semver.org)
Patch, solo arreglos o bug
Formato X.Y.Z
67. V$r-*+% '$/ P,q($&$
Semantic versioning (http://semver.org)
Patch, solo arreglos o bug
Formato X.Y.Z
Minor, nueva funcionalidad
compatible con la versión
anterior
68. V$r-*+% '$/ P,q($&$
Semantic versioning (http://semver.org)
Patch, solo arreglos o bug
Formato X.Y.Z
Minor, nueva funcionalidad
compatible con la versión
anterior
Major, cambio no compatible
con la versión anterior
69. V$r-*+% '$/ P,q($&$
Podemos indicar la versión de forma explicita
{
"version": "1.0.0"
}
70. V$r-*+% '$/ P,q($&$
Si tenemos nuestro proyecto en SVN, la versión se
obtiene automáticamente analizando sus Tags y Ramas
Basado en Tags
• 1.0.0
• v1.0.0
Basado en Ramas
• 1.10.5-RC1
• v5.6.10beta2
• v2.2.2-alpha
• v2.0.3-p1
Si el nombre de la rama se parece a una versión, el nombre de la
versión será {nombre_de_rama}-dev si no dev-{nombre_de_rama}.
• 2.0.x-dev
• dev-master
• 2.0.0.x-dev
• dev-bugfix
71. L, pr!p*$',' "*%*"("--&,b*/*&1
El valor por defecto es stable
Los valores disponibles para esta opción por orden
ascendente: dev, alpha, beta, RC y stable
{
"minimum-stability": "stable"
}
Definir una dependencia para que pueda instalarse si
tiene estabilidad inferior.
"dmd/dms": "1.0.0@dev"
72. D$2%*$%'! $/ ,/*,- '$ (%, r,",
Ya puedes indicar 1.0.* como versión del paquete y en
realidad, estás instalando la versión dev-master.
Alias temporal:
"monolog/monolog": "dev-bugfix as 1.0.x-dev"
73. P,q($&$- '$/ -*-&$",
Representan a elementos instalados en tu servidor
Permiten chequear las dependencias con PHP, sus
extensiones y a algunas librerías del sistema
$ composer show --platform
81. S)r*p&-
Permiten ejecutar acciones al producirse alguno de los eventos
definidos por Composer
• pre | post-install-cmd
• pre | post-update-cmd
• pre | post-package-install
• pre | post-package-update
• pre | post-package-uninstall
• pre | post-autoload-dump
• post-root-package-install
• post-create-project-cmd
Solamente se ejecutan los scripts del paquete principal,
por lo que los scripts definidos en los archivos composer.json de las
dependencias, no se ejecutan.
85. I%-&,/,'!r$-
Permiten personalizar la lógica de instalación de los paquetes.
Symfony2, Aura, Yii, Yii2 incluyen instaladores propios.
Podemos utilizar los instaladores oficiales:
(https://github.com/composer/installers)
• Drupal
• Laravel
• Magento
• WordPress
• CakePHP
• Moodle
• phpBB
• CodeIgniter
• ¡Y muchos más!
86. U-,%'! (% *%-&,/,'!r
Este ejemplo muestra el fichero composer.json de un paquete que
usa el instalador “phpdocumentor-template”
87. U-,%'! (% *%-&,/,'!r
Este ejemplo muestra el fichero composer.json de un paquete que
usa el instalador “phpdocumentor-template”
Tipo que determina el
instalador.
88. U-,%'! (% *%-&,/,'!r
Este ejemplo muestra el fichero composer.json de un paquete que
usa el instalador “phpdocumentor-template”
Dependencia que añade el
código del instalador.
89. Cr$,%'! (% *%-&,/,'!r
Un instalador es un paquete compuesto como mínimo por dos
archivos:
1. Archivo composer.json de tipo composer-installer, que
define el paquete
2. Clase del instalador que implementa la interfaz
ComposerInstallerInstallerInterface
• supports()
• isInstalled()
• install()
• update()
• uninstall()
• getInstallPath()
90. Cr$,%'! (% *%-&,/,'!r
Este ejemplo muestra el fichero composer.json de un paquete
instalador.
91. Cr$,%'! (% *%-&,/,'!r
Este ejemplo muestra el fichero composer.json de un paquete
instalador.
Paquete de tipo instalador.
92. Cr$,%'! (% *%-&,/,'!r
Este ejemplo muestra el fichero composer.json de un paquete
instalador.
Paquete de tipo instalador.
Clase del instalador.
95. I%-&,/,)*+% '$ S,&*-
1º- Instalamos SATIS con Composer ejecutando el siguiente comando:
# composer create-project composer/satis –s dev!
96. I%-&,/,)*+% '$ S,&*-
1º- Instalamos SATIS con Composer ejecutando el siguiente comando:
# composer create-project composer/satis –s dev!
2º- Definimos la configuración de SATIS, para ello, creamos el
fichero satis.json en la carpeta de instalación.
97. I%-&,/,)*+% '$ S,&*-
3º- Ejecutamos el siguiente comando para crear el repositorio de
paquetes:
# php bin/satis build satis.json web/!
Satis lee el archivo de configuración satis.json y crea un repositorio
estático de paquetes dentro del directorio web/
Se recomienda crear un cron con este comando para automatizar la
actualización de nuestro repositorio.
98. I%-&,/,)*+% '$ S,&*-
4º- Por último, crea un virtual host en tu servidor web que apunte al
directorio web/ anterior y ya dispondrás de tu propio mini-Packagist.