Neler yeni

Yazılım Forum

Tüm özelliklerimize erişmek için şimdi bize katılın. Kayıt olduktan ve giriş yaptıktan sonra konu oluşturabilecek, mevcut konulara yanıt gönderebilecek, itibar kazanabilecek, özel mesajlaşmaya erişebilecek ve çok daha fazlasını yapabileceksiniz! Bu hizmetlerimiz ise tamamen ücretsiz ve kurallara uyulduğu sürece sınırsızdır, o zaman ne bekliyorsunuz? Hadi, sizde aramıza katılın!

PHP Projelerinde Bağımlılık Yönetimi: Composer Detaylı Rehber

PHP Projelerinde Bağımlılık Yönetimi: Composer Detaylı Rehber

Günümüz modern yazılım geliştirme süreçlerinde, projelerin karmaşıklığı arttıkça, farklı kütüphanelere ve çerçevelere olan bağımlılıklar da kaçınılmaz hale gelmektedir. Bir proje geliştirirken, genellikle tarih/zaman işlemleri için Carbon, veritabanı etkileşimleri için Doctrine veya Laravel gibi bir ORM, testler için PHPUnit gibi birçok harici bileşene ihtiyaç duyarız. Bu bileşenlere "bağımlılık" (dependency) denir. Peki, bu bağımlılıkları yönetmek neden bu kadar önemlidir ve nasıl yapılır? İşte burada Composer devreye girer.

Bağımlılık Yönetimi Nedir ve Neden Gereklidir?
Bağımlılık yönetimi, bir projenin ihtiyaç duyduğu harici kütüphanelerin ve paketlerin otomatik olarak indirilmesi, güncellenmesi ve doğru bir şekilde çalışmasını sağlayan süreçtir. Geleneksel olarak, PHP projelerinde bu kütüphaneler manuel olarak indirilir, projeye dahil edilir ve güncellemeleri takip etmek oldukça zor olurdu. Her geliştiricinin projesinde farklı bir kütüphane versiyonu kullanması, "Benim bilgisayarımda çalışıyordu!" gibi yaygın sorunlara yol açabilirdi. Composer bu karmaşayı ortadan kaldırır.

Composer Nedir?
Composer, PHP için bir bağımlılık yönetim aracıdır. Projenizin ihtiyaç duyduğu kütüphaneleri belirtmenize, bunları sizin için yüklemesine ve güncellemesine olanak tanır. Composer, projenizin gereksinimlerini belirten bir
Kod:
composer.json
dosyasına dayanır. Projeniz için hangi kütüphanenin hangi versiyonunun gerektiğini bu dosyada tanımlarsınız. Composer, Packagist (https://packagist.org/) gibi merkezi bir havuzdan paketleri bulur ve indirir.

composer-logo.png

Görsel: Composer'ın logosu veya çalışma prensibini gösteren bir şema.

Composer Kurulumu
Composer'ı sisteminize kurmak oldukça basittir. Genellikle komut satırı üzerinden yapılır.
Kod:
// Linux/macOS için:
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

// Windows için:
// Composer-Setup.exe dosyasını indirebilirsiniz: https://getcomposer.org/Composer-Setup.exe
Kurulumdan sonra, terminalinizde
Kod:
composer --version
komutunu çalıştırarak Composer'ın başarıyla yüklendiğini teyit edebilirsiniz.

composer.json Dosyası
Her Composer destekli PHP projesinin kalbinde
Kod:
composer.json
dosyası bulunur. Bu dosya, projenizin bağımlılıklarını ve diğer metadata bilgilerini tanımlayan bir JSON dosyasıdır. İşte temel bir örnek:
Kod:
{
    "name": "vendor/my-project",
    "description": "Basit bir Composer projesi",
    "type": "project",
    "license": "MIT",
    "authors": [
        {
            "name": "Adınız Soyadınız",
            "email": "email@example.com"
        }
    ],
    "require": {
        "php": ">=7.4",
        "monolog/monolog": "^2.0"
    },
    "require-dev": {
        "phpunit/phpunit": "^9.5"
    },
    "autoload": {
        "psr-4": {
            "MyApp\\": "src/"
        }
    },
    "scripts": {
        "test": "phpunit",
        "post-install-cmd": [
            "echo 'Proje bağımlılıkları başarıyla yüklendi!'"
        ]
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true
    },
    "minimum-stability": "dev",
    "prefer-stable": true
}

  • name: Projenizin adı. Genellikle
    Kod:
    vendor-adı/proje-adı
    formatında olur.
  • description: Projenin kısa açıklaması.
  • type: Projenin tipi (project, library, metapackage, composer-plugin).
  • license: Projenizin lisansı.
  • authors: Projeyi geliştirenlerin listesi.
  • require: Projenizin çalışması için gerekli olan bağımlılıkları ve versiyon kısıtlamalarını tanımlar. Örneğin,
    Kod:
    monolog/monolog: ^2.0
    demek, Monolog kütüphanesinin 2.x serisinden herhangi bir versiyonunun kullanılabileceği anlamına gelir.
  • require-dev: Sadece geliştirme ortamında kullanılan bağımlılıkları (örn. test kütüphaneleri) tanımlar.
  • autoload: Projenizin sınıflarının Composer tarafından nasıl otomatik yükleneceğini belirler (PSR-4 veya PSR-0). Bu,
    Kod:
    use
    anahtar kelimesiyle sınıfları kolayca kullanmanızı sağlar.
  • scripts: Çeşitli Composer olaylarına (örneğin, bağımlılıklar yüklendikten sonra) veya manuel olarak çalıştırılabilecek özel komutları tanımlar.
  • config: Composer'ın çalışma şekliyle ilgili ayarları içerir. Örneğin, otomatik yükleyiciyi optimize etme veya paketleri indirme tercihleri.
  • minimum-stability: Kurulacak paketlerin minimum stabilite seviyesini belirler (dev, alpha, beta, RC, stable).
  • prefer-stable: Eğer stable bir sürüm varsa, onu dev sürümlere tercih eder.

Versiyon Kısıtlamaları
Composer'da bağımlılık versiyonlarını belirtirken farklı operatörler kullanırız:
  • 1.0.0: Tam olarak bu versiyon.
  • ^1.0 (caret): ~1.0.0'a eşdeğerdir. 1.0.0 ve üzeri, ancak 2.0.0'dan küçük. Ana versiyonun (major version) kırıcı değişiklikler içermediği varsayıldığı için yaygın kullanılır.
  • ~1.2 (tilde): 1.2.0 ve üzeri, ancak 1.3.0'dan küçük. Patch (yama) veya minor (küçük) güncellemeleri kabul eder.
  • 1.0.*: 1.0.0, 1.0.1, 1.0.99 gibi 1.0 serisindeki tüm versiyonlar.
  • >=1.0: 1.0 ve üzeri.
  • <1.5: 1.5'ten küçük.
  • 1.0 - 1.5: 1.0 dahil, 1.5 dahil aralığı.
En çok kullanılan operatör
Kod:
^(caret)
operatörüdür, çünkü bu, bağımlılıklarınızın hem güncel kalmasını hem de projeyi bozmamasını sağlar.

composer.lock Dosyası ve vendor Dizini
Kod:
composer install
komutunu çalıştırdığınızda, Composer
Kod:
composer.json
dosyasını okur, bağımlılıkları çözer ve indirir. İndirilen tüm paketler
Kod:
vendor/
dizinine yerleştirilir. Ayrıca, Composer, o anki bağımlılıkların tam olarak hangi versiyonlarının yüklendiğini kaydeden bir
Kod:
composer.lock
dosyası oluşturur.

Önemli Not:
Kod:
composer.lock
dosyası sürüm kontrol sisteminize (örn. Git) dahil edilmelidir. Bu, ekibinizdeki diğer geliştiricilerin ve üretim ortamının, tam olarak sizin kullandığınız bağımlılık versiyonlarını kullanmasını garanti eder. Bu sayede, farklı ortamlarda farklı davranışların önüne geçilir.
Kod:
vendor/
dizini ise sürüm kontrol sistemine dahil edilmemelidir (
Kod:
.gitignore
dosyasına eklenmelidir), çünkü bu dizin sadece Composer tarafından yönetilir ve gereksiz dosya şişkinliği yaratır.

Temel Composer Komutları

  • composer install: Eğer
    Kod:
    composer.lock
    dosyası varsa, bu dosyadaki versiyonları kullanarak bağımlılıkları kurar. Eğer yoksa,
    Kod:
    composer.json
    'dan okur ve yeni bir
    Kod:
    composer.lock
    dosyası oluşturur. Genellikle projeyi ilk kez kurarken veya yeni bir geliştirici ekibe katıldığında kullanılır.
  • composer update:
    Kod:
    composer.json
    'daki versiyon kısıtlamalarına göre bağımlılıkları en son uygun versiyonlarına günceller ve
    Kod:
    composer.lock
    dosyasını yeniden yazar. Bu komut, bağımlılıklarınızı yeni özellikler veya güvenlik yamaları almak için güncel tutmak istediğinizde kullanılır.
  • composer require [paket-adı]: Yeni bir bağımlılığı projenize ekler. Composer, paketi Packagist'ten bulur, indirir,
    Kod:
    composer.json
    ve
    Kod:
    composer.lock
    dosyalarını günceller.
    Kod:
        composer require guzzlehttp/guzzle
        composer require --dev phpunit/phpunit
    Yukarıdaki örnekte
    Kod:
    guzzlehttp/guzzle
    paketi
    Kod:
    require
    bölümüne,
    Kod:
    phpunit/phpunit
    ise
    Kod:
    --dev
    bayrağı sayesinde
    Kod:
    require-dev
    bölümüne eklenecektir.
  • composer remove [paket-adı]: Bir bağımlılığı projeden kaldırır.
    Kod:
        composer remove monolog/monolog
  • composer dump-autoload: Autoloading dosyalarını yeniden oluşturur. Özellikle yeni sınıflar eklediğinizde veya
    Kod:
    composer.json
    'daki
    Kod:
    autoload
    bölümünü değiştirdiğinizde gerekebilir.
  • composer validate:
    Kod:
    composer.json
    dosyanızın geçerli olup olmadığını kontrol eder.
  • composer search [anahtar-kelime]: Packagist'te paket aramanızı sağlar.
  • composer self-update: Composer'ın kendisini en son sürüme günceller.

Autoloading ile Daha Düzenli Kod
Composer'ın en güçlü özelliklerinden biri de otomatik yükleme (autoloading) yeteneğidir. Projenizdeki PHP sınıflarını (özellikle PSR-4 veya PSR-0 standartlarına uygun olarak) manuel olarak
Kod:
require
veya
Kod:
include
etmek zorunda kalmadan kullanmanızı sağlar.
Kod:
composer.json
dosyanızda
Kod:
autoload
bölümünü tanımladığınızda:
Kod:
"autoload": {
    "psr-4": {
        "MyApp\\": "src/"
    },
    "files": [
        "app/Helpers.php"
    ]
}
Yukarıdaki yapılandırma,
Kod:
src/
dizini altındaki
Kod:
MyApp
namespace'ine sahip tüm sınıfların otomatik olarak yükleneceği anlamına gelir. Örneğin,
Kod:
src/Http/Kernel.php
dosyasında
Kod:
MyApp\Http\Kernel
sınıfınız varsa, Composer'ın otomatik yükleyicisi sayesinde bu sınıfı doğrudan
Kod:
new MyApp\Http\Kernel();
şeklinde kullanabilirsiniz. Ayrıca
Kod:
files
özelliği ile belirli PHP dosyalarını (örn. helper fonksiyonları) her zaman yüklemesini sağlayabilirsiniz.

Tüm bu otomatik yükleme, Composer'ın sizin için oluşturduğu
Kod:
vendor/autoload.php
dosyası sayesinde gerçekleşir. Yapmanız gereken tek şey, uygulamanızın ana giriş noktasında (örneğin
Kod:
index.php
veya
Kod:
public/index.php
) bu dosyayı dahil etmektir:
Kod:
// index.php
require __DIR__ . '/vendor/autoload.php';

// Artık Composer tarafından yüklenen tüm kütüphaneler ve kendi sınıflarınız kullanılabilir.
$log = new Monolog\Logger('my_app');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
$log->warning('Bu bir uyarı mesajıdır.');

$kernel = new MyApp\Http\Kernel(); // Kendi sınıfınız
$kernel->handleRequest();

Geliştirme ve Üretim Ortamlarında Bağımlılık Yönetimi
Composer,
Kod:
require
ve
Kod:
require-dev
bölümleri sayesinde farklı ortamlar için farklı bağımlılıkları yönetmenizi sağlar.
  • Geliştirme Ortamı (Development Environment): Tüm bağımlılıklar (hem
    Kod:
    require
    hem de
    Kod:
    require-dev
    ) yüklüdür. Testler, kod analizi araçları gibi geliştirme araçlarına ihtiyaç duyulur.
    Kod:
    composer install
    komutu yeterlidir.
  • Üretim Ortamı (Production Environment): Yalnızca projenin çalışması için zorunlu olan bağımlılıklar (
    Kod:
    require
    bölümündekiler) yüklenmelidir. Bu, disk alanından tasarruf sağlar ve potansiyel güvenlik açıklarını azaltır. Bu durumda
    Kod:
    composer install --no-dev
    komutu kullanılır.

En İyi Uygulamalar ve İpuçları
  • Versiyon Kısıtlamalarını Akıllıca Kullanın: Genellikle
    Kod:
    ^(caret)
    operatörü tercih edilir. Bu, bağımlılıklarınızın hem güvenli hem de güncel kalmasını sağlar. Büyük bir versiyon atlaması olmadan yeni özellikler ve güvenlik yamaları almanızı sağlar.
  • composer.lock Dosyasını Git'e Ekleme: Daha önce de belirtildiği gibi, bu dosya tüm ekibin ve sunucuların aynı bağımlılık versiyonlarını kullanmasını garantiler.
  • vendor/ Dizinini Git'ten Hariç Tutma: Bu dizin
    Kod:
    .gitignore
    'a eklenmelidir.
  • Periyodik composer update: Geliştirme ortamında düzenli olarak
    Kod:
    composer update
    çalıştırarak bağımlılıklarınızı güncel tutun. Ancak bunu yapmadan önce mutlaka bir versiyon kontrolü kullanın ve potansiyel kırıcı değişikliklere karşı testlerinizi çalıştırın.
  • minimum-stability ve prefer-stable: Bu ayarlar, paketin stabilite tercihini yönetir. Üretim projeleri için
    Kod:
    prefer-stable: true
    ve
    Kod:
    minimum-stability: stable
    kullanmak en güvenlisidir, ancak bazen yeni özellikler veya hata düzeltmeleri için
    Kod:
    dev
    veya
    Kod:
    beta
    paketlere ihtiyaç duyulabilir.
  • Paketleri Packagist'ten Araştırın: Yeni bir özellik eklemeden önce, genellikle Packagist'te ihtiyacınızı karşılayacak bir paket bulabilirsiniz. Bu, tekerleği yeniden icat etmekten kurtarır ve zaman kazandırır.

Sık Karşılaşılan Sorunlar ve Çözümleri
  • Bellek Sınırı Hatası: Özellikle çok sayıda bağımlılığı olan büyük projelerde Composer'ın bellek yetersizliği hatası verebilir.
    Kod:
        php -d memory_limit=-1 /usr/local/bin/composer install
    Bu komut PHP'nin bellek sınırını kaldırır. Sunucu yapılandırmasını kalıcı olarak değiştirmek yerine, sadece bu işlem için bellek limitini artırmak daha güvenlidir.
  • Versiyon Çakışmaları: İki farklı bağımlılığın aynı alt paketin farklı versiyonlarına ihtiyaç duyması durumunda ortaya çıkar. Composer genellikle bu durumu size bildirir.
    Kod:
    composer why-not [çakışan-paket-adı]
    komutuyla neden belirli bir versiyonun yüklenemediğini veya bir bağımlılığın neden çakıştığını görebilirsiniz.
  • Eski PHP Versiyonu: Bazı paketler belirli bir PHP versiyonu gerektirebilir.
    Kod:
    composer.json
    'daki
    Kod:
    php
    kısıtlamasını kontrol edin ve PHP versiyonunuzu güncelleyin.

Sonuç olarak: Composer, modern PHP geliştirmenin vazgeçilmez bir aracıdır. Bağımlılıklarınızı yönetmek, projelerinizi daha düzenli, sürdürülebilir ve işbirliğine açık hale getirir. Projelerinizi Composer ile başlatmak, gelecekteki olası sorunların önüne geçmenize yardımcı olur ve geliştirme sürecinizi büyük ölçüde hızlandırır.
 
shape1
shape2
shape3
shape4
shape5
shape6
Üst

Bu web sitenin performansı Hazal Host tarafından sağlanmaktadır.

YazilimForum.com.tr internet sitesi, 5651 sayılı Kanun’un 2. maddesinin 1. fıkrasının (m) bendi ve aynı Kanun’un 5. maddesi kapsamında Yer Sağlayıcı konumundadır. Sitede yer alan içerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır.

YazilimForum.com.tr, kullanıcılar tarafından paylaşılan içeriklerin doğruluğunu, güncelliğini veya hukuka uygunluğunu garanti etmez ve içeriklerin kontrolü veya araştırılması ile yükümlü değildir. Kullanıcılar, paylaştıkları içeriklerden tamamen kendileri sorumludur.

Hukuka aykırı içerikleri fark ettiğinizde lütfen bize bildirin: lydexcoding@gmail.com

Sitemiz, kullanıcıların paylaştığı içerik ve bilgileri 6698 sayılı KVKK kapsamında işlemektedir. Kullanıcılar, kişisel verileriyle ilgili haklarını KVKK Politikası sayfasından inceleyebilir.

Sitede yer alan reklamlar veya üçüncü taraf bağlantılar için YazilimForum.com.tr herhangi bir sorumluluk kabul etmez.

Sitemizi kullanarak Forum Kuralları’nı kabul etmiş sayılırsınız.

DMCA.com Protection Status Copyrighted.com Registered & Protected