16.032012

Composer oder wie bringe ich PHP ein require-Management bei

Wenn ein PHP-Projekt wächst gelangt man unausweichlich an einen Punkt, in dem es kritisch wird, bestimmte Teile zu aktualisieren oder auch alle Abhängigkeiten zu überblicken.

Genau an diesem Punkt setzt das Projekt Composer an.

Der Composer sieht sich als ein Werkzeug zum Managen der Abhängigkeiten eines PHP-Projektes. Er erlaubt es einem, die Bibliotheken zu definieren, die das eigene PHP-Projekt benötigt und installiert sie in ein 'vendor' genanntes Verzeichnis im eigenen Projektverzeichnis.

Die Definition der Abhängigkeiten erfolgt in der projektspezifischen composer.json:

{
    "name": "joocom/project1",
    "description": "First PHP-Projekt",
    "keywords": ["first", "php", "projekt"],
    "homepage": "http://example.org/",
    "authors": [
        {
            "name": "Max Mustermann",
            "email": "mustermann@example.org",
            "homepage": "http://www.example.org"
        },
        {
            "name": "Maxi Musterhausen",
            "email": "musterhausen@example.com",
            "homepage": "http://www.example.com"
        }
    ],
    "config": {
        "vendor-dir": "vendor"
    },
    "repositories": {
        "basic-libary": {
            "type": "svn",
            "url": "svn://localhost/libs/basic-libary"
        }
    },
    "require": {
        "php": ">=5.3.0",
        "libs/basic-libary": ">=1.0.0"
    }
}

Unter 'repositories' kann man seine eigenen Repositories ('basic-libary') aufführen. Diese können zum Beispiel entweder in Versionskontroll-Systemen (Git, Svn) oder Archiven liegen. Für eine genauere Auflistung der unterstützen Repository-Arten und zusätzlichen Inhalten der composer.json empfiehlt sich die Dokumentation vom Composer.

In der Beispiel-Konfigurationsdatei ist ein Subversion-Repository angegeben. Bei diesen ist es wichtig, dass sie sich an den Standard  ('trunk', 'branches' und 'tags') halten. Wenn das Repository nicht für eine einzige Libary gilt, dann sollte optimaler weise jede in dem Repositry enthaltene Libary diese Verzeichnisstruktur enthalten.

Des Weiteren benötigt jede Libary eine eigene composer.json, in der die Libary beschrieben wird. Hier werden auch sofern erforderlich weitere Abhängigkeiten angegeben.

{
    "name": "libs/basic-libary",
    "description": "generic basic-libary",
    "version": "1.0.0-dev",
    "source": {
        "url": "svn://localhost/libs/basic-libary",
        "type": "svn",
        "reference": "trunk/"
    }
}

Wenn man seine Grundstruktur geschaffen hat und den Composer laut Anleitung installiert hat, muss man nur noch ein

php composer.phar install

bzw.

php composer.phar update

in seinem PHP-Projektverzeichnis ausführen und die definierten Abhängigkeiten werden installiert.

Nachdem die Installation abgeschlossen ist, muss man nur noch die folgende Zeile Code in seinem Projekt integrieren und der Composer kümmert sich auch um das automatische Laden der Klassen.

require 'vendor/.composer/autoload.php';