2015-10-13 29 views
5

Birden çok alt klasöre sahip bir projem var. Klasörlerden birinde bazı "eklentiler" dir. Tüm bu eklentilerin bir besteci.json ve bir satıcı-klasör var. Şimdi kendi eklentimi oluşturmayı ve yeni bir klasör oluşturmayı ve bu dizine bir composer.json koymayı istedim. composer install sorunsuz çalışır, ancak ben bir şekilde hatası bu soruna neden olabilir neTanımlanmamış yönteme çağrı Composer \ Autoload \ ClassLoader :: setPsr4()

FastCGI: server "/fcgi-bin-php5-fpm-ezi" stderr: PHP message: PHP Fatal error: Call to undefined method Composer\\Autoload\\ClassLoader::setPsr4() 

alıyorum benim addon yükleme olduğumda? Zaten composer dump-autoload ve composer global update yaptım, çünkü bu çözümleri internette buldum, ancak hala çalışmıyor. Alt klasörlerde çalışmasını sağlamak için özel bir şey yapmak zorunda mıyım?

Bu da yardımcı olur bilmiyorum şu anda benim composer.json

{ 
    "name": "namespace/projectname-addonname", 
    "autoload": { 
    "psr-4": { 
     "namespace1\\namespace2\\namespace3\\" : "src" 
    } 
    } 
} 

, ama yükleyici var_dump zaman bu bir sonuç

object(Composer\Autoload\ClassLoader)#138 (4) { 
    ["prefixes":"Composer\Autoload\ClassLoader":private]=> 
    array(0) { 
    } 
    ["fallbackDirs":"Composer\Autoload\ClassLoader":private]=> 
    array(0) { 
    } 
    ["useIncludePath":"Composer\Autoload\ClassLoader":private]=> 
    bool(false) 
    ["classMap":"Composer\Autoload\ClassLoader":private]=> 
    array(0) { 
    } 
} 

olduğunu $loader->setPsr4 yöntemdir Bundan sonra aradı ve ölümcül hatayı alıyorum.

Garip olan şu ki, psr-4 yerine classmap kullanırken, otomatik yükleme için sorunsuz çalışıyor.

+0

Besteci versiyonunuz nedir? 'Besteci - dönüşüm' sonucu nedir? –

+0

“Composer version 1.0-dev (6eb50623e6e00bac4ed893802836e50b62c83434) 2016-02-08 19: 03: 10' ve aynı problem – OzzyCzech

cevap

2
"autoload": 
{ 
    "psr-4": 
    { 
    "namespace1\\namespace2\\namespace3\\" : "src" 
    }, 

    "classmap": ["src/"] 
} 

Bunu deneyin!

+3

Lütfen yazınızı düzenleyin ve bunun neden çalıştığını açıklayın. –

1

Durumumda, kod içinde ClassLoader.php dosyasının birden çok sürümünde sorun vardı. Bana davamı açıklayayım, içimde Besteci ve nasıl sahip birden Wordpress eklentileri var onlar tekrar require __DIR__ . '/autoload.php'; sınıf zaten yüklenir arayıp olabilir zaman bunlardan ilk composer/autoload_real.php dosyanın Sonra

if ('Composer\Autoload\ClassLoader' === $class) { 
    require __DIR__ . '/ClassLoader.php'; 
} 

izlenmek koduyla ClassLoader.php gerektiren başlatılır Farklı arayüz (bizim durumumuzdaki eksik fonksiyonlar).

Sen, Yansıma ile kontrol sağ Benim durumumda new \Composer\Autoload\ClassLoader();

$reflector = new ReflectionClass('\\Composer\\Autoload\\ClassLoader'); 
die($reflector->getFileName()); 

Sınıf farklı kaynak o anda geçerli çalışma dir yüklenen sonra composer/autoload_real.php için takip kodu ekleyebilir.

Çözüm: O yardımcı olmadığını composer self-update

  • ile bestecinin

    • indir son sürüm sonra projenizde composer.json ile tüm klasörleri ziyaret edip composer update
    • çağrı sonra composer global update çalıştırın ve kontrol
  • İlgili konular