Composer
Zarządzanie zależnościami w PHP

Michał Pipa
28 września 2012

O mnie

Ankieta

Zarządzanie zależnościami

PEAR

PEAR

Frankly, the PEAR packages are more or less obsolete as we now have Composer. Installing Symfony or any other framework for that matter globally on a system does not make much sense.
Fabien Potencier, Tests in PEAR packages?
Composer logo

Jak działa Composer?

Composer

Composer

Inspiracja

Autorzy

Composer

Instalacja

$ curl -s http://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer

Aktualizacja

$ composer self-update

Definiowanie zależności dla projektu

composer.json

{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}
$ composer install
Loading composer repositories with package information
Installing dependencies
  - Installing monolog/monolog (1.0.2)
    Downloading: 100%

Writing lock file
Generating autoload files

Instalowanie zależności w projekcie

$ git clone git://github.com/symfony/symfony-standard.git
$ cd symfony-standard
$ composer install
Installing dependencies from lock file
  - Installing doctrine/common (2.2.2)
    Downloading: 100%
[...]
symfony/symfony suggests installing doctrine/data-fixtures (1.0.*)
[...]
Generating autoload files
Clearing the cache for the dev environment with debug true
Installing assets using the hard copy option
Installing assets for Acme\DemoBundle into web/bundles/acmedemo
[...]

Co zostało utworzone?

composer.lock

composer.lock

{
    "hash": "e4e3109acc8a04877ee974efb7478127",
    "packages": [
        {
            "package": "monolog/monolog",
            "version": "1.0.2"
        }
    ],
    "packages-dev": null,
    "aliases": [

    ],
    "minimum-stability": "dev",
    "stability-flags": [

    ]
}

Autoloader

require 'vendor/autoload.php';

Autoloader

Przykład użycia Monologa:

$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log',
    Monolog\Logger::WARNING));

$log->addWarning('Foo');

PSR-0

Jest to mapowanie nazwy klasy (razem z przestrzenią nazw) na ścieżkę do pliku z definicją tej klasy, aby ją następnie załadować.

\Doctrine\Common\IsolatedClassLoader
=>/path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
\Symfony\Core\Request
=> /path/to/project/lib/vendor/Symfony/Core/Request.php
\Zend\Acl => /path/to/project/lib/vendor/Zend/Acl.php
\Zend\Mail\Message
=> /path/to/project/lib/vendor/Zend/Mail/Message.php
\namespace\package\Class_Name
=> /path/to/project/lib/vendor/namespace/package/Class/Name.php
\namespace\package_name\Class_Name
=> /path/to/project/lib/vendor/namespace/package_name/Class/Name.php

Implementacja: ClassLoader (komponent Symfony)

Packagist

Packagist

Packagist

Packagist

Packagist

Typy repozytoriów

Satis

Proszę o komentarze

QRCode

https://joind.in/7183

Pytania

Dziękuję za uwagę