PHP Libs mit Composer verwalten

PHP Projekte können im Laufe der Zeit gerne schnell recht groß werden. Vor allem die Liste an Abhängigkeiten zu Bibliotheken steigt gerne schnell an: Das Erstellen von PDF-Dokumenten, APIs zur Kommunikation mit Drittanbietern und Template-Engines sind nur drei Beispiele was in der Regel jedes größere PHP Projekt benötigt. Man kann natürlich alle Bibliotheken per Hand in das Projektverzeichnis kopieren, doch dann hat man auch die Aufgabe den PHP Autoloader selbst einzurichten und regelmäßig nach Updates zu suchen.

Wie Composer eingerichtet und verwendet wird ist hier zu lesen:

Composer leistet wunderbare Dienste um diese Bibliotheken zu verwalten:

  • automatisches Installieren der benötigten Version
  • aktualisieren von Bibliotheken
  • sicherstellen, dass Updates kompatibel bleiben
  • automatisches Installieren der benötigten Abhängigkeiten

Composer installieren

Composer besteht aus einer einzigen PHP Datei mit dem Namen composer.phar. Man kann diese Datei gut im Wurzelverzeichnis des Projekts behalten und in die Versionsverwaltung übernehmen, so hat man nach dem Klonen/Auschecken der Dateien direkt eine lauffähige Arbeitsumgebung.

Um Composer zu installieren genügt es die Datei composer-setup.php herunterzuladen und auszuführen. Dieses Script führt ein paar Prüfungen gegen die PHP Installation durch und erzeugt dann die Datei composer.phar.

Composer initialisieren

Dieser Schritt ist nur nötig, wenn man ein neues Projekt mit Composer beginnt:

> php composer.phar init

Dadurch erzeugt Composer nun eine erste composer.json Datei. Diese sammelt alle Abhängigkeiten für das aktuelle Projekt. Vor der Erzeugung werden noch ein paar Dinge abgefragt:

Welcome to the Composer config generator

This command will guide you through creating your composer.json config.

Package name (<vendor>/<name>) [stefan/composertest]:
Description []:
Author [Stefan Gaffga <stefan@gaffga.de>, n to skip]:
Minimum Stability []:
Package Type (e.g. library, project, metapackage, composer-plugin) []: project
License []: proprietary

Define your dependencies.

Would you like to define your dependencies (require) interactively [yes]? no
Would you like to define your dev dependencies (require-dev) interactively [yes]? no

{
    "name": "stefan/composertest",
    "type": "project",
    "authors": [
        {
            "name": "Stefan Gaffga",
            "email": "stefan@gaffga.de"
        }
    ],
    "require": {}
}

Do you confirm generation [yes]?

Bestätigt man diese letzte Abfrage mit „yes“ wird die composer.json generiert. Diese ist zunächst noch leer, doch kann nun mit Composer Kommandos leicht befüllt werden.

Bibliotheken hinzufügen

Um die Template-Engine Twig hinzuzufügen, gibt man folgendes sein:

> php composer.phar require twig/twig

Composer installiert diese dann:

Using version ^1.24 for twig/twig
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing twig/twig (v1.24.2)
    Downloading: 100%

Writing lock file
Generating autoload files

Bibliotheken verwenden

Composer installiert alle heruntergeladenen Dateien zusammen mit ein paar internen Verwaltungsdateien in den Ordner vendor/. Diesen sollte man auch nicht in die Versionsverwaltung übernehmen, da ja die composer.json zum einen genau definiert was benötigt wird, und zum anderen ein gehöriger Aufwand in der Versionsverwaltung entsteht wenn eine umfangreiche Bibliothek aktualisiert wird.

Um nun Twig in einem PHP Script zu verwenden, required man den von Composer generierten Autoloader:

<?php
require_once "vendor/autoload.php";
$twig = new Twig_Environment();
// now work with Twig...

Da der Autoloader stets aktuell gehalten wird, kann man ab nun sogar ohne Änderungen am Code neue Bibliotheken verwenden sobald composer diese installiert hat.