Composer

Dependency Manager

Package Manager

  • Apt
  • Yum

Dependeny Manager

  • pro Projekt
  • global (!)

Stellt euch vor...

  • Projekt mit verschiedenen Abhängigkeiten
  • Abhängigkeiten haben auch Abhängigkeiten

Composer

  • Abhängigkeiten definieren
  • Abhängigkeiten herunterladen
  • Abhängigkeiten der Abhängigkeiten auch
  • Führt Buch

Installation

Lokal im Projekt

Global

!

Global Linux/Mac

php -r "readfile('https://getcomposer.org/installer');" > composer-setup.php
php -r "if (hash('SHA384', file_get_contents('composer-setup.php')) === 'fd26ce67e3b237fffd5e5544b45b0d92c41a4afe3e3f778e942e43ce6be197b9cdc7c251dcde6e2a52297ea269370680') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); }"
php composer-setup.php
php -r "unlink('composer-setup.php');"

mv composer.phar /usr/local/bin/composer

Global Windows

composer init

Demo

composer.json

Require

{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}

Versionierung

  • Exakt
  • Range
  • Range (Hyphen)
  • Wildcard
  • Tilde
  • Caret
  • Stability

Exact

1.2.3

Range

  • >=1.0
  • >=1.0 <2.0
  • >=1.0 <1.1 || >=1.2

Range (Hyphen)

1.0 - 2.0

Wildcard

1.0.*

Tilde

~1.2

Caret

^1.2.3
composer.lock

Composer.lock einchecken?

  • Projekt?
    • Ja!
  • Library?
    • Muss nicht

Autoloading

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

Autoloader erweitern

$loader = require __DIR__ . '/vendor/autoload.php';
$loader->add('Acme\\Test\\', __DIR__);

Eigene Libraries hinzufügen

{
    "autoload": {
        "psr-4": {"Acme\\": "src/"}
    }
}

PSR-0 vs. PSR-4

PSR-0

namespace Acme\Foo

{
    "autoload": {
        "psr-0": {"Acme\\Foo\\": "app/src/"}
    }
}

app/
 - src/
   - Acme/
     - Foo/   <- Acme\Foo root

PSR-4

namespace Acme\Foo

{
    "autoload": {
        "psr-4": {"Acme\\Foo\\": "app/src/"}
    }
}

app/
 - src/    <- Acme\Foo root

Libraries

Jedes Projekt ist ein Paket

{
    "name": "acme/hello-world",
    "require": {
        "monolog/monolog": "1.0.*"
    }
}

Platform Requirements

  • php, z.B. ">= 5.4.0"
  • hhvm, z.B. ">=2.3.3"
  • ext-<name>, z.B. "ext-gd"
  • lib-<name>, z.B. "lib-curl"

Versionen

  • Git Tags = Package Versionen
  • Git Branches => "dev-feature/foobar"
  • Git Commits => "dev-master#4dbec70"
composer.json

im Detail

Repositories

Fragen?

Ende!

Composer

By Ole Rößner

Composer

A quick introduction into composer

  • 979