SevkiBilge

Composer ile özel bir paket oluştururken namespace hatası alıyorum

AyseKavalHQ
· 2 gün önce · 0 görüntülenme
Arkadaşlar merhaba, bir süredir Composer ile özel bir paket oluşturmaya çalışıyorum ama namespace konusunda takıldım. Şöyle ki; kendi geliştirdiğim bir kütüphaneyi Packagist'e yüklemek istemiyorum, sadece projelerim arasında local olarak kullanmak için özel bir repository oluşturup composer.json ile yüklemeye çalışıyorum. Paketimin dosya yapısı şu şekilde: src/ klasörü altında "MyCompany/MyPackage" şeklinde bir dizin yapım var ve her şeyi PSR-4'e uygun şekilde düzenlediğimi düşünüyordum. Ama ne zaman "composer install" çalıştırıp sınıfı çağırmaya kalksam, "Class 'MyCompany\MyPackage\MyClass' not found" hatası alıyorum. Autoload bölümüne "psr-4: {"MyCompany\\MyPackage\\": "src/"}" şeklinde tanımladım ama hata devam ediyor.

Bir de fark ettim ki, eğer paketi "vendor/" klasörü yerine direkt proje kökünde bir "packages/" dizinine koyup path repository olarak tanımlasam, bazen namespace hatası almıyorum ama bu sefer de başka bir sorun çıkıyor. Mesela, ana projenin namespace'i ile çakışma oluyor ya da otoload derlemesi sırasında "Warning: Ambiguous class resolution" uyarısı alıyorum. Sanırım bu işin bir standardı var ama ben tam oturtamadım. Sizce namespace tanımımda bir yanlışlık mı var? Yoksa dosya yapısını mı düzgün kurmadım? Özellikle "src/" altında alt dizinlerin isimlendirmesi büyük harf küçük harf duyarlılığı açısından önemli mi?

Bir de merak ettiğim konu şu: composer.json içinde "autoload" bölümünü güncelledikten sonra "composer dump-autoload" çalıştırmayı unutmuyorum ama yine de hata alıyorum. Bazen "composer update" yapınca düzeliyor, bazen düzelmiyor. Bu durumda composer'ın vendor klasörünü silip tekrar yüklemek işe yarar mı? Yoksa namespace hatasının kaynağı başka bir yerde mi? Tecrübeli arkadaşlar nasıl bir yol izliyor, özellikle büyük projelerde özel paketleri yönetirken sıkıntı yaşamamak için nelere dikkat etmek gerekiyor? Bir de PSR-0 ile PSR-4 arasındaki farkı biliyorum ama pratikte hangisini kullanmak daha avantajlı? Paylaşırsanız sevinirim, bu işi çözmek için kafayı yemek üzereyim.
0 yanıt

Henüz yanıt bulunmuyor. İlk yanıtlayan siz olun!

Yanıt yazmak için giriş yapın.