2015-10-13 12 views
5

私は複数のサブフォルダを持つプロジェクトを持っています。フォルダの1つでは、いくつかの「アドオン」です。これらのアドオンはすべてcomposer.jsonとvendor-folderを持っています。私は自分のアドオンを構築して新しいフォルダを作成し、そのディレクトリにcomposer.jsonを入れたいと思っていました。 composer install何の問題もなく動作しますが、私は何とか自分のアドオンをインストールするよ、私はこの問題を引き起こす可能性がありますどのようなエラーに未定義のメソッドを呼び出す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() 

を取得していますか?私はすでにcomposer dump-autoloadcomposer global updateでした。私はこれらの解決策をインターネット上で見つけましたが、まだ動作しません。私はそれがサブフォルダで動作するように特別な何かをしなければならないのですか?

これは$loader->setPsr4方法はその後それが助け場合、私は知りませんが、私はローダーをvar_dumpとき、これは結果

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) { 
    } 
} 

ある現在、私のcomposer.json

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

です私は致命的なエラーを取得しています。

オートロードにpsr-4の代わりにclassmapを使用すると、問題なく動作します。

+0

あなたの作曲家のバージョンは何ですか? '作曲者 - バージョン'の結果は何ですか? –

+0

私は 'Composer version 1.0-dev(6eb50623e6e00bac4ed893802836e50b62c83434)2016-02-08 19:03:10'と同じ問題を持っています – OzzyCzech

答えて

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

    "classmap": ["src/"] 
} 

お試しください!

+3

あなたの投稿を編集して、なぜこれが機能するのか説明してください。 –

1

私の場合、コード内にClassLoader.phpファイルの複数バージョンの問題がありました。あなたは再び呼び出すときに次にrequire __DIR__ . '/autoload.php';クラスがすでにロードされていて

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

composer/autoload_real.phpファイルに次のコードで ClassLoader.phpを必要とし、私は私の場合を説明しましょう、私は内部の作曲で複数のWordpressのプラグインを持っているし、どのように彼らは、最初にそれらの初期化されます異なるインターフェース(私たちの場合は機能がありません)。

あなたは、リフレクションでそれをチェックし右の私の場合はnew \Composer\Autoload\ClassLoader();

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

composer/autoload_real.phpにフォローコードを追加することができ、クラスが別のソースから、現在の作業ディレクトリをロードしました。

ソリューション

  • 作曲のダウンロード最新バージョンcomposer self-update
  • と、その後、プロジェクトにcomposer.jsonですべてのフォルダを訪問し、composer global updateを実行し、それが
  • を助けるのですかどうかを確認後、 composer update
  • を呼び出します
関連する問題