Composer est très bon outil quand on développe en php.

La documentation est abondante sur le net pour utiliser composer afin de gérer les dépendences d’un projet. Par contre, elle est beaucoup moins fournie quand il s’agit de créer une lib qu’on veut publier.

Récemment, j’ai crée une petite bibliothèque en php pour Prestashop, j’ai pas mal cherché avant de trouver comment faire un composer.json simple et garder une structure de dossiers minimaliste.

Voici à quoi ressemble mon composer.json :

{
	"name": "hpar/prestashop-bridge",
	"description": "Integrate prestashop in an existing php application",
	"license": "MIT",
	"require": {
		"symfony/http-foundation": "~2.1"
	},
	"autoload": {
		"psr-4": {
			"Hpar\\PrestashopBridge\\": ""
		}
	}
}

La doc sur le schema nous indique que deux champs sont nécessaires Required for published packages (libraries). : Name et Description.

On peut rencontrer par la suite de petites difficultées si le nom est en camelCase au lieu de hyphenated-words.

Il est de bon ton d’ajouter la license. Dans mon cas, j’ai une dépendence à symfony/http-foundation et donc une section require.

La section importante (mais optionnelle) est l’autoload. C’est elle qui va nous permettre d’écrire dans nos scripts :

<?php 

use MyCompany\MyProject\MyFile;

Et comprendre que ce fichier à pour chemin Project/vendor/MyCompany/MyProject/src/MyFile.php

Comme la doc l’indique, il y a deux façon de faire : soit en PSR-0 soit PSR-4.

Et comme 4 > 2, je suis parti sur PSR-4. D’autres trouveront des arguments rationnels dans cet article :

Each approach brings with itself some pros and cons – PSR-4 would allow for simpler folder structures, but would prevent us from knowing the exact path of a class just by looking at the fully qualified name. PSR-0 on the other hand is chaotic on the hard drive, but supports developers who are stuck in the past (the underscore-in-class-name users) and helps us discern the location of a class just by looking at its name. Sitepoint.com : battle of autoloaders - Bruno Skvorc

Et moi, j’aime bien les structures simples. Donc j’ai choisi de ne pas avoir 50000 sous dossiers (même pas un dossier src) :

"autoload": {
	"psr-4": {
		"MyCompany\\MyProject\\": ""
	}
}

Dans cet exemple, le dossier MyCompany contient un dossier MyProject qui contient les scripts php. composer directory structure

C’est super simple.