Composer
Zarządzanie zależnościami w PHP
Michał Pipa
28 września 2012
Michał Pipa
28 września 2012
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.
$ curl -s http://getcomposer.org/installer | php $ sudo mv composer.phar /usr/local/bin/composer
$ composer self-update
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
$ 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 [...]
vendor/
composer.lock
vendor/autoload.php
)composer.json
)install
w pierwszej kolejności sprawdza wersję biblioteki w composer.lock
, jeżeli on istniejecomposer.lock
nie istnieje, to wtedy sprawdzany jest composer.json
i tworzony composer.lock
update
aktualizuje biblioteki do najnowszej wersji pasującej do composer.json
i zapisuje te wersje w composer.lock
{ "hash": "e4e3109acc8a04877ee974efb7478127", "packages": [ { "package": "monolog/monolog", "version": "1.0.2" } ], "packages-dev": null, "aliases": [ ], "minimum-stability": "dev", "stability-flags": [ ] }
require 'vendor/autoload.php';
Przykład użycia Monologa:
$log = new Monolog\Logger('name'); $log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING)); $log->addWarning('Foo');
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)
$ composer create-project composer/satis