Composer PHP'nin paket yöneticisidir. Proje klasörünüzde composer require vendor/package çalıştırın: Composer kütüphaneyi vendor/ içine indirir, composer.json içine kaydeder ve siz onu, kurduğunuz diğer her şeyle birlikte tek satırla yüklersiniz: require __DIR__ . '/vendor/autoload.php';.
composer require monolog/monolog
<?php
require __DIR__ . '/vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Level;
$log = new Logger('app');
$log->pushHandler(new StreamHandler(__DIR__ . '/app.log', Level::Warning));
$log->warning('Disk almost full', ['free' => '2%']);
Her dosya için include yok: otomatik yükleyici Logger, StreamHandler ve kullandıkları her şeyi, her sınıfa ilk ihtiyaç duyulduğunda yükler. Paketler Composer'ın varsayılan olarak aradığı herkese açık kayıt olan Packagist üzerinden gelir.
Composer kurulumu
Composer önce makinenizde PHP gerektirir (bkz. PHP kurulumu).
Windows: getcomposer.org adresinden Composer-Setup.exe dosyasını indirip çalıştırın. php.exe dosyanızı bulur ve composer komutunu PATH'e ekler. Ardından yeni bir terminal açın.
Homebrew ile macOS:
brew install composer
Linux: dağıtımınızın paketi (Debian ve Ubuntu'da sudo apt install composer) çalışır ama çoğu zaman eski bir sürümdür. Resmi yükleyici güncel olanı verir:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
sudo mv composer.phar /usr/local/bin/composer
getcomposer.org üzerindeki indirme sayfası ayrıca yükleyiciyi çalıştırmadan önce onun hash'ini kontrol eden bir satır gösterir; güncel hash'i almak için komutları oradan kopyalayın. Sonra çalıştığını kontrol edin:
composer --version
composer.json ve composer.lock
composer init birkaç soru sorar ve composer.json dosyasını yazar ya da composer require onu ilk pakette oluşturur. Tipik bir örnek:
{
"name": "acme/shop",
"require": {
"php": ">=8.2",
"monolog/monolog": "^3.0",
"vlucas/phpdotenv": "^5.6"
},
"require-dev": {
"phpunit/phpunit": "^11.0"
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
requireprojenin çalışması için gerekenleri, PHP sürümü dahil, listeler.require-devyalnızca geliştirme için araçları (testler, statik analiz) listeler.composer require --dev phpunit/phpunitbuna ekler vecomposer install --no-devüretim sunucularında onu atlar.autoloadComposer'a kendi sınıflarınızın nerede yaşadığını söyler (aşağıda).
Yanına Composer, paketlerinizin bağlı olduğu paketler dahil kurduğu her paketin tam sürümünü içeren composer.lock dosyasını yazar. İki dosyayı da commit edin. vendor/ klasörünü commit etmeyin: onu .gitignore dosyasına ekleyin, çünkü composer install onu kilit dosyasından yeniden oluşturur.
composer install ile composer update
composer install # install exactly what composer.lock says
composer update # pick the newest allowed versions, rewrite composer.lock
composer update monolog/monolog # update one package only
composer remove monolog/monolog # uninstall and remove from composer.json
composer outdated # list packages with newer versions available
Bir projeyi klonladıktan sonra ve her dağıtımda composer install çalıştırın: herkes test edilmiş aynı sürümleri alır. composer update komutunu yalnızca yükseltmeyi amaçladığınızda çalıştırın, sonra test edin ve yeni composer.lock dosyasını commit edin. Bir üretim sunucusunda update çalıştırmak kimsenin test etmediği sürümleri kurar.
Sürüm kısıtları: ^ ve ~
| Kısıt | İzin verdiği | Kullanım alanı |
|---|---|---|
^3.2 | 3.2.0'dan 4.0.0'a kadar (4.0.0 hariç) | Olağan seçim: özellikler ve düzeltmeler, bozucu ana sürüm yok |
^0.4 | 0.4.0'dan 0.5.0'a kadar (0.5.0 hariç) | Ara sürümlerin bozabildiği 1.0 öncesi paketler |
~3.2 | 3.2.0'dan 4.0.0'a kadar (4.0.0 hariç) | ^3.2 ile aynı |
~3.2.1 | 3.2.1'den 3.3.0'a kadar (3.3.0 hariç) | Yalnızca düzeltmeler |
3.2.1 | Tam olarak 3.2.1 | Nadiren; güvenlik düzeltmelerini engeller |
>=3.2 <3.5 | Özel bir aralık | Bozuk bir sürümü atlatmak |
Sürüm belirtmeden composer require vendor/package en yeni kararlı sürümü seçer ve onun için bir ^ kısıtı yazar; genellikle istediğiniz budur.
Kendi sınıflarınızı PSR-4 ile otomatik yükleme
PSR-4 bir isim alanını bir klasöre eşleyen kuraldır: "App\\": "src/" ile App\Text\Slug sınıfı src/Text/Slug.php dosyasında yaşar. autoload bölümünü ekledikten sonra şunu çalıştırın:
composer dump-autoload
Composer'ın otomatik yükleyicisi spl_autoload_register() ile kaydedilmiş bir fonksiyondur; PHP kod henüz yüklenmemiş bir sınıfı her kullandığında onu çağırır. Bu blok iki sınıf dosyası yazar ve kendine ait küçük bir PSR-4 otomatik yükleyici kaydeder, böylece eşlemenin çalıştığını izleyebilirsiniz. Üçüncü bir sınıf dosyası ekleyin ve onu kullanın.
Otomatik yükleyici sınıf başına bir kez çalışır: ikinci Slug::from() çağrısı hiçbir autoload: satırı yazdırmaz, çünkü sınıf zaten yüklüdür. Gerçek bir projede bu fonksiyonu asla kendiniz yazmazsınız; vendor/autoload.php vendor/ içindeki paketleri de ele alan Composer sürümünü kaydeder. İsim alanları isim alanları sayfasında anlatılıyor.
Sık görülen hatalar
Class "Monolog\Logger" not found. Betikrequire 'vendor/autoload.php'yapmadı ya da yol yanlış. Yol geçerli dizine bağlı olmasın diye__DIR__ . '/vendor/autoload.php'kullanın.- Kendi sınıfınız
autoloadbölümüne ekledikten sonra bulunamıyor.composer dump-autoloadçalıştırın ve dosya yolunun büyük küçük harf dahil isim alanıyla tam olarak eşleştiğini kontrol edin:App\Text\Slugsrc/Text/Slug.phpolmalıdır ve Linux sunucularısrc/text/slug.phpdosyasını farklı bir dosya sayar. Your requirements could not be resolved to an installable set of packages. İki paket bir şeyin, çoğu zaman PHP'nin kendisinin, uyumsuz sürümlerine ihtiyaç duyuyor. Mesaj çakışmayı listeler;composer why-not vendor/package 2.0bir sürümü neyin engellediğini açıklar.composertanınmıyor. Terminal kurulumdan önce açılmış ya da klasör PATH içinde değil. Yeni bir terminal açın ya da doğrudanphp composer.pharçağırın.
Sıkça Sorulan Sorular
composer install ile composer update arasındaki fark nedir?
composer install tam olarak composer.lock içinde kayıtlı sürümleri kurar, böylece her makine aynı kodu alır; onu projeyi klonladıktan sonra ve dağıtımda çalıştırın. composer update composer.json dosyasının izin verdiği en yeni sürümleri çözümler, kurar ve composer.lock dosyasını yeniden yazar; onu yükseltmek istediğinizde çalıştırın.
composer.lock dosyasını ve vendor klasörünü commit etmeli miyim?
Uygulamalar için composer.lock dosyasını commit edin, böylece herkes aynı sürümleri kurar. vendor/ klasörünü commit etmeyin: onu .gitignore dosyasına ekleyin ve composer install komutunun yeniden oluşturmasına izin verin.
composer.json içinde ^ ne anlama gelir?
^2.3 2.3.0'dan 3.0.0'a kadar (3.0.0 hariç) herhangi bir sürüme izin verir: yeni özellikler ve düzeltmeler, ama kodunuzu bozabilecek yeni bir ana sürüm değil. ~2.3 aynı anlama gelir, ~2.3.1 ise yalnızca 2.3.1'den itibaren 2.3.x sürümlerine izin verir.
Kendi sınıflarımı Composer ile nasıl otomatik yüklerim?
composer.json dosyasına "autoload": {"psr-4": {"App\\": "src/"}} ekleyin, composer dump-autoload çalıştırın ve require 'vendor/autoload.php' yazın. Bir App\Mail\Mailer sınıfı o zaman onu ilk kullandığınızda src/Mail/Mailer.php dosyasından yüklenir.
Hangi Composer sürümünün kurulu olduğunu nasıl kontrol ederim?
composer --version çalıştırın. Composer'ın kendisini yükseltmek için composer self-update çalıştırın ya da onu kurduğunuz paket yöneticisiyle yükseltin, örneğin brew upgrade composer.