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 Composer ile Etkili Paket Yönetimi: Geliştirme Sürecinizi Hızlandırın

PHP Composer: Paket Yönetimi modern PHP geliştirmenin temel taşlarından biridir. Günümüzdeki yazılım projeleri, tek başına yazılan küçük uygulamalar olmaktan çıkıp, birçok farklı kütüphanenin ve bağımlılığın bir araya geldiği karmaşık sistemlere dönüşmüştür. İşte tam da bu noktada Composer devreye girer ve PHP projelerindeki bağımlılık yönetimini bir standart haline getirir.

Composer Nedir ve Neden Gereklidir?

PHP ekosistemi, geliştiricilerin ihtiyaç duyduğu birçok hazır kütüphane ve çerçeveye ev sahipliği yapar. Ancak bu kütüphanelerin her birinin kendine özgü bağımlılıkları ve sürümleri olabilir. Geleneksel olarak, bu kütüphaneleri manuel olarak indirmek, projenize eklemek ve bağımlılıklarını yönetmek zaman alıcı, hataya açık ve sürdürülemez bir süreçti. Composer, bu sorunları çözmek için tasarlanmış bir araçtır.

Composer, projenizin ihtiyaç duyduğu paketleri (kütüphaneleri) belirtmenizi sağlar ve ardından bu paketleri, onların bağımlılıklarıyla birlikte otomatik olarak indirir ve yönetir. Ayrıca, otomatik yükleme (autoloading) özelliği sayesinde, projenizdeki sınıf dosyalarını manuel olarak dahil etmek zorunda kalmazsınız. Bu, projenizin daha düzenli, taşınabilir ve ekip içinde daha kolay yönetilebilir olmasını sağlar.

Avantajları saymakla bitmez:
  • Standartlaşma: Bağımlılık yönetimine standart bir yaklaşım getirir.
  • Otomatik Yükleme: PSR-4 gibi standartlara uygun otomatik sınıf yüklemesi sağlar.
  • Taşınabilirlik: Projeleri farklı ortamlara kolayca taşımayı mümkün kılar, çünkü tüm bağımlılıklar tek bir komutla yüklenebilir.
  • Güncelleme Kolaylığı: Bağımlılıkları kolayca güncelleyebilir ve sürüm çakışmalarını yönetebilirsiniz.

Daha fazla bilgi için Composer resmi web sitesini ziyaret edebilirsiniz.

Composer Kurulumu

Composer'ı kurmak oldukça basittir ve genellikle birkaç dakika sürer. İşletim sisteminize göre farklı kurulum yöntemleri mevcuttur.

Windows İçin Kurulum:
  • Composer-Setup.exe dosyasını indirin.
  • İndirdiğiniz dosyayı çalıştırın ve kurulum sihirbazındaki adımları takip edin.
  • Kurulum sırasında PHP CLI (Command Line Interface) yorumlayıcınızın yolunu doğru bir şekilde belirttiğinizden emin olun (örn: C:\php\php.exe).
  • Kurulum tamamlandıktan sonra bir komut istemcisi açın ve
    Kod:
    composer --version
    yazarak Composer'ın başarıyla yüklendiğini doğrulayın.

Linux ve macOS İçin Kurulum:
  • Terminalinizi açın ve aşağıdaki komutları sırasıyla çalıştırarak Composer'ı indirin ve yükleyin:
    Kod:
    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
  • Bu komutlar Composer'ı global olarak sisteminize kurar. İlk satır Composer kurulum dosyasını indirir, ikincisi onu çalıştırır, üçüncüsü kurulum dosyasını siler ve dördüncüsü ise composer.phar dosyasını sistem genelinde çalıştırılabilir hale getirir.
  • Kurulumu doğrulamak için terminalde
    Kod:
    composer --version
    yazın.

`composer.json` Dosyası: Projenin Kalbi

Composer'ın tüm sihrinin gerçekleştiği yer, projenizin kök dizininde bulunan `composer.json` dosyasıdır. Bu dosya, projenizin bağımlılıklarını, meta verilerini, otomatik yükleme kurallarını ve betikleri tanımlayan JSON formatında bir dosyadır.

İşte tipik bir `composer.json` dosyasının yapısı ve içeriği:

Kod:
{
    "name": "vendor-name/project-name",
    "description": "Bu harika bir PHP projesidir.",
    "type": "project",
    "license": "MIT",
    "authors": [
        {
            "name": "Adınız Soyadınız",
            "email": "email@example.com"
        }
    ],
    "minimum-stability": "stable",
    "prefer-stable": true,
    "require": {
        "php": ">=7.4",
        "monolog/monolog": "^2.0",
        "guzzlehttp/guzzle": "^7.0",
        "symfony/yaml": "^5.0"
    },
    "require-dev": {
        "phpunit/phpunit": "^9.5",
        "symfony/var-dumper": "^5.0"
    },
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        },
        "files": [
            "src/Helpers/functions.php"
        ]
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "scripts": {
        "post-update-cmd": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-install-cmd": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "test": "phpunit",
        "clear-cache": "php artisan cache:clear"
    },
    "config": {
        "allow-plugins": {
            "php-http/discovery": true,
            "composer/installers": true
        },
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true
    }
}

Önemli `composer.json` Alanları:
  • name: Paketinizi tanımlayan benzersiz bir isimdir (örn: vendor-name/package-name). Kendi projeniz için genellikle vendor/project-name kullanılır.
  • description: Projenizin veya paketinizin kısa bir açıklaması.
  • require: Projenizin çalışması için mutlaka gerekli olan bağımlılıkları ve bunların sürüm kısıtlamalarını belirtir. Bu bağımlılıklar hem geliştirme hem de üretim ortamında yüklenecektir.
  • require-dev: Sadece geliştirme veya test ortamında gerekli olan bağımlılıkları belirtir (örn: test çerçeveleri, hata ayıklama araçları). Üretim ortamına genellikle
    Kod:
    composer install --no-dev
    komutu ile dahil edilmezler.
  • autoload: Composer'ın sınıf yükleyicisini (autoloader) yapılandırdığınız bölümdür. En yaygın kullanılan PSR-4 standardıdır. Bu sayede, projenizdeki sınıfları otomatik olarak yükleyebilir ve `require` veya `include` ifadelerini tek tek yazmaktan kurtulursunuz. Örneğin,
    Kod:
    "App\\": "src/"
    tanımı, `App` namespace'i altındaki sınıfların `src/` dizininde aranacağını belirtir. `files` anahtarı ile belirli dosyaları da her zaman yüklenmek üzere tanımlayabilirsiniz.
  • autoload-dev: Geliştirme bağımlılıklarına özel otomatik yükleme kuralları tanımlamak için kullanılır. Genellikle test sınıfları burada tanımlanır.
  • scripts: Belirli Composer olayları (örneğin, post-install-cmd, post-update-cmd) veya özel adlandırılmış betikler (test, clear-cache) için çalıştırılacak komutları tanımlar. Bu, geliştirme iş akışınızı otomatikleştirmek için çok kullanışlıdır.
  • config: Composer'ın çalışma şeklini etkileyen çeşitli ayarları içerir. Örneğin, eklentilere izin verme (allow-plugins), otomatik yükleyiciyi optimize etme (optimize-autoloader) gibi.

Temel Composer Komutları

Composer ile çalışırken sıkça kullanacağınız bazı temel komutlar şunlardır:

  • Kod:
    composer init
    :
    Yeni bir projede adım adım `composer.json` dosyası oluşturmanıza yardımcı olan etkileşimli bir komuttur.
  • Kod:
    composer install
    :
    Projenizin `composer.json` dosyasında belirtilen ve `composer.lock` dosyasında kilitli olan tüm bağımlılıkları indirir ve yükler. Eğer `composer.lock` dosyası mevcut değilse, `composer.json`'dan bağımlılıkları çözümler ve yeni bir `composer.lock` dosyası oluşturur. Projeyi bir sunucuya dağıtırken veya bir ekip üyesi projenizi ilk kez kurarken genellikle bu komut kullanılır.
  • Kod:
    composer update
    :
    `composer.json` dosyasında belirtilen bağımlılıkları, en son uyumlu sürümlerine günceller ve `composer.lock` dosyasını da buna göre günceller. Bağımlılıkların yeni sürümlerini almak istediğinizde kullanılır.
  • Kod:
    composer require vendor/package
    :
    Projenize yeni bir paket eklemek için kullanılır. Örneğin, bir loglama kütüphanesi eklemek için
    Kod:
    composer require monolog/monolog
    yazabilirsiniz. Bu komut hem paketi indirir hem de `composer.json` dosyanızdaki `require` bölümünü otomatik olarak günceller.
  • Kod:
    composer require vendor/package --dev
    :
    Bir paketi sadece geliştirme bağımlılığı olarak eklemek için kullanılır (örn:
    Kod:
    composer require phpunit/phpunit --dev
    ). Bu, `composer.json`'daki `require-dev` bölümüne ekleme yapar.
  • Kod:
    composer remove vendor/package
    :
    Belirli bir paketi projenizden kaldırmak için kullanılır. Hem paketi `vendor/` dizininden siler hem de `composer.json` ve `composer.lock` dosyalarını günceller.
  • Kod:
    composer dump-autoload
    :
    Özellikle `composer.json`'daki `autoload` bölümünde manuel olarak değişiklik yaptığınızda (örn: yeni bir namespace veya dizin eklediğinizde) Composer'ın otomatik yükleme dosyalarını yeniden oluşturmak için kullanılır. Mevcut sınıf haritasını günceller.
  • Kod:
    composer validate
    :
    `composer.json` dosyanızın sözdizimsel olarak doğru olup olmadığını ve Composer standartlarına uyup uymadığını kontrol eder. Herhangi bir hata varsa uyarı verir.
  • Kod:
    composer global require package
    :
    Bir paketi projenize değil, sisteminize global olarak yükler. Genellikle PHP geliştirme araçları (örn: Laravel Installer, PHP CS Fixer) için kullanılır. Bu paketler `$HOME/.composer/vendor/bin` dizinine kurulur.

Otomatik Yükleme (Autoloading) ve PSR Standartları

Composer'ın en dönüştürücü özelliklerinden biri otomatik yükleme mekanizmasıdır. Bu özellik sayesinde, projenizdeki binlerce sınıf dosyasını tek tek require veya include etmek yerine, Composer'ın oluşturduğu tek bir
Kod:
vendor/autoload.php
dosyasını projenizin giriş noktasında dahil etmeniz yeterlidir.

Kod:
// public/index.php
require __DIR__ . '/vendor/autoload.php';

use App\Core\Application;
use App\Services\UserService;

$app = new Application();
$userService = new UserService();
$app->run();

Yukarıdaki örnekte gördüğünüz gibi,
Kod:
vendor/autoload.php
dosyasını dahil ettikten sonra `App\Core\Application` veya `App\Services\UserService` gibi sınıfları doğrudan namespace'leri üzerinden kullanabiliriz. Composer, PHP-FIG (PHP Framework Interoperability Group) tarafından tanımlanan PSR-4 standardını kullanarak bu sınıfları otomatik olarak bulur ve yükler.

"PSR-4 standardı, bir sınıfın nitelikli adını (fully qualified class name) dosya sistemi üzerindeki bir yola eşlemek için bir yol tanımlar. Bu, Composer'ın projenizdeki ve bağımlılıklarınızdaki tüm sınıf dosyalarını verimli bir şekilde bulup yüklemesini sağlar."

`composer.json` dosyasındaki `autoload` bölümü, bu eşlemelerin nasıl yapılacağını belirler. Örneğin:
Kod:
"autoload": {
    "psr-4": {
        "App\\": "src/",
        "Library\\": "lib/"
    },
    "files": [
        "app/helpers.php"
    ]
}
Bu yapılandırma ile:
  • `App` namespace'i altındaki sınıflar `src/` dizininde aranır (örn: `App\Controllers\HomeController` sınıfı `src/Controllers/HomeController.php` dosyasında).
  • `Library` namespace'i altındaki sınıflar `lib/` dizininde aranır.
  • `app/helpers.php` dosyası, otomatik yükleyici dahil edildiğinde her zaman yüklenir. Bu, global yardımcı fonksiyonlar için kullanışlıdır.

Packagist.org: PHP Paketlerinin Merkezi

Packagist.org, Composer'ın kullandığı ana paket deposudur. PHP topluluğu tarafından geliştirilen ve paylaşılan yüz binlerce açık kaynak PHP paketini barındırır. Yeni bir kütüphaneye ihtiyacınız olduğunda, Packagist'te arama yaparak uygun bir çözüm bulabilir ve onu projenize dahil etmek için gerekli Composer komutunu (`composer require`) öğrenebilirsiniz.

Packagist, Composer ekosisteminin merkezi sinir sistemi gibidir; paketlerin keşfedilmesini, dağıtılmasını ve yönetilmesini sağlar. Kendi paketinizi geliştirip diğerleriyle paylaşmak isterseniz, onu Packagist'e kaydettirerek bunu kolayca yapabilirsiniz.

İyi Uygulamalar (Best Practices)

Composer'ı etkin ve sorunsuz bir şekilde kullanmak için bazı iyi uygulamaları benimsemek önemlidir:

  • Kod:
    composer.lock
    Dosyasını Versiyon Kontrolüne Dahil Edin:
    Her zaman `composer.lock` dosyasını Git (veya kullandığınız diğer versiyon kontrol sistemi) deposuna ekleyin. Bu dosya, tüm bağımlılıklarınızın ve alt bağımlılıklarınızın kesin sürümlerini kilitler. Bu sayede, ekibinizdeki her geliştirici ve üretim sunucunuz aynı bağımlılık sürümlerini kullanarak tutarlılık sağlar. Yalnızca `composer.json`'ı takip etmek, farklı ortamlarda farklı paket sürümlerinin yüklenmesine neden olabilir.
  • Versiyon Kısıtlamalarını Dikkatli Belirleyin: `composer.json` içindeki paket versiyon kısıtlamaları, bağımlılıklarınızın hangi aralıkta güncellenebileceğini belirler. En yaygın kullanılan caret operatörü (`^`) esneklik ve stabilitenin iyi bir dengesini sunar. Örneğin,
    Kod:
    "monolog/monolog": "^2.0"
    ifadesi, `2.0.0` ve üstü (ancak `3.0.0` altı) tüm sürümlerin uyumlu olduğunu belirtir. Büyük sürüm güncellemeleri (örneğin `2.x`'ten `3.x`'e geçiş) genellikle kırıcı değişiklikler içerdiğinden, bu operatör güvenliği sağlar. Exact versions (`1.2.3`) veya tilde (`~1.2`) gibi başka kısıtlama türleri de vardır, ancak dikkatli kullanılmalıdır.
  • Üretim Ortamında Geliştirme Bağımlılıklarını Yüklemeyin: Canlı sunuculara dağıtım yaparken, gereksiz bağımlılıkları yüklemekten kaçının.
    Kod:
    composer install --no-dev
    komutunu kullanarak `require-dev` bölümündeki paketlerin yüklenmesini engelleyin. Bu, disk alanından tasarruf sağlar, dağıtım süresini kısaltır ve potansiyel güvenlik risklerini azaltır.
  • PHP Sürümünüzü Belirtin: Projenizin `composer.json` dosyasındaki `require` bölümüne projenizin gerektirdiği minimum PHP sürümünü ekleyin (örn:
    Kod:
    "php": ">=7.4"
    ). Bu, projenizin uyumlu olmayan bir PHP sürümüne sahip bir ortamda kurulmasını engeller ve erken uyarı sağlar.
  • Composer Önbelleğini Temizleyin: Nadiren de olsa, bağımlılık çözme sorunlarıyla karşılaştığınızda veya Composer'ın beklenmedik davranışlar sergilediğini düşündüğünüzde
    Kod:
    composer clear-cache
    komutunu çalıştırarak Composer'ın indirme ve meta veri önbelleğini temizlemek sorunu çözebilir.
  • Sıfırdan Başlamak İçin `vendor` ve `composer.lock` Silin: Çok inatçı bağımlılık sorunlarında,
    Kod:
    rm -rf vendor/ composer.lock
    komutlarını kullanarak temiz bir başlangıç yapabilir, ardından
    Kod:
    composer install
    ile bağımlılıkları yeniden yükleyebilirsiniz. Ancak bunu yapmadan önce `composer.json` dosyanızın doğru olduğundan emin olun.

Sık Karşılaşılan Sorunlar ve Çözümleri

Composer kullanırken karşılaşabileceğiniz bazı yaygın sorunlar ve bunların çözümleri:

  • Bellek Yetersizliği Hatası (`memory_limit`): Özellikle büyük projelerde veya çok sayıda bağımlılığı olan projelerde Composer'ın PHP'nin varsayılan bellek limitini aşması mümkündür. Bu durumda aşağıdaki komutu kullanarak PHP'nin bellek limitini geçici olarak artırabilirsiniz:
    Kod:
    php -d memory_limit=-1 $(which composer) install
    Veya global olarak PHP yapılandırmanızdaki (`php.ini`) `memory_limit` değerini artırabilirsiniz.
  • Minimum Stability Hatası: Composer varsayılan olarak sadece `stable` (kararlı) paket sürümlerini yükler. Eğer bir paketin `dev` (geliştirme), `beta`, `RC` (Release Candidate) veya `alpha` sürümünü kullanmaya çalışıyorsanız, aşağıdaki hatayı alabilirsiniz:
    Kod:
    Problem 1
        - The requested package vendor/package could not be found in any version, there may be a typo in the package name.
        - The package has no versions matching your minimum-stability (stable).
    Bu sorunu çözmek için `composer.json` dosyanıza `"minimum-stability": "dev", "prefer-stable": true` ekleyebilirsiniz. `prefer-stable: true` sayesinde, `dev` sürümüne izin verirken, mümkün olduğunca kararlı sürümleri tercih edecektir.
  • Bağımlılık Çakışmaları: İki farklı paket aynı bağımlılığın farklı, uyumsuz sürümlerini gerektirdiğinde bağımlılık çakışmaları meydana gelir. Composer bu durumu size bildirir. Sorunu analiz etmek için
    Kod:
    composer why-not vendor/package version
    komutunu kullanabilirsiniz. Bu komut, belirli bir paketin belirli bir sürümünün neden yüklenemediğini detaylı olarak açıklar. Çözüm genellikle ya paket sürümlerini ayarlamak ya da alternatif bir paket bulmaktır.
  • HTTPS Doğrulama Hatası: Bazen SSL/TLS sertifikası sorunları nedeniyle paket indirme sırasında HTTPS doğrulama hataları alabilirsiniz. Bu genellikle bir ağ veya proxy yapılandırma sorunudur. Geçici bir çözüm olarak
    Kod:
    composer config -g -- repo.packagist.org.url http://packagist.org
    komutunu kullanabilirsiniz, ancak bu güvenlik riski taşıdığından kalıcı bir çözüm olmaktan uzaktır. Daha iyi bir çözüm, sertifika sorununu çözmektir.

Sonuç

PHP Composer, modern PHP geliştirmenin vazgeçilmez bir aracıdır. Bağımlılık yönetimini basitleştirir, otomatik yüklemeyi standartlaştırır ve geliştirme sürecinizi büyük ölçüde hızlandırır. Bu rehberde Composer'ın ne olduğundan, nasıl kurulacağından, `composer.json` dosyasının öneminden, temel komutlarından, otomatik yükleme prensiplerinden ve iyi uygulama yöntemlerinden bahsettik. Karşılaşabileceğiniz yaygın sorunlara da değindik.

Composer'ı doğru bir şekilde anlamak ve kullanmak, daha temiz, daha sürdürülebilir, daha güvenli ve daha yönetilebilir PHP projeleri oluşturmanız için temel bir adımdır. Projelerinizi bir sonraki seviyeye taşımak için Composer'ın sunduğu tüm imkanlardan yararlanmaktan çekinmeyin. Unutmayın, iyi bir paket yönetimi, başarılı bir yazılım projesinin anahtarıdır.

Gelecek projelerinizde Composer ile bol şans!
 
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