1

ワークベンチでの開発で使用すると正しく動作する Laravel 4 のパッケージを作成しましたが、Composer でインストールするとエラーが返され続けますClass 'Myvendor\Mypackage\MypackageServiceProvider' not found

私のパッケージには、私のクラス ソースの名前が私のパッケージの名前と異なるという特殊性があります。通常、それらは同じです。

vendor/
    Houle/
        laravel-dynamite/
            src/
                Fhoule/
                    Dynamite/
                        DynamiteServiceProvider.php

Laravelもこのように動作するので、うまくいくことはわかっています。

vendor/
    laravel/
        framework/
            src/
                Illuminate/

そして、私のパッケージcomposer.jsonのプロパティPSR-0は適切に構成されているようです:

"name": "Houle/laravel-dynamite",
...
"require": {
    "php": ">=5.3.0",
    "illuminate/support": "4.0.x"
},
"autoload": {
    "classmap": [
        "src/migrations",
        "src/controllers",
        "src/models"
    ],
    "psr-0": {
        "Fhoule\\Dynamite": "src/"
    }
},
...

パッケージの作成方法:

  • Artisanでパッケージを作成しました。
  • ワークベンチディレクトリで正しく動作するようにしました
  • プライベート Bitbucket リポジトリにプッシュ
  • Laravelの新しいインスタンスをインストール
  • composer.json構成を変更してパッケージをインストールしました (プライベート リポジトリから)

    "name": "laravel/laravel",
    ...
    "require": {
        "laravel/framework": "4.0.*",
        "Houle/laravel-dynamite": "2.0.1"
    },  
    "repositories": [{
        "type": "package",
        "package": {
            "name": "Houle/laravel-dynamite",
            "version": "2.0.1",
            "source": {
                "url": "git@bitbucket.org:Houle/laravel-dynamite.git",
                "type": "git",              
                "reference": "v2.0.1"
            }
        }
    }],
    ...
    
  • 私のパッケージ Service Provider を app/config/app.php に追加しました:

    'providers' => array(
        'Fhoule\Dynamite\DynamiteServiceProvider',
    )
    

それが私のアプリケーションがエラーを返す場所ですClass 'Fhoule\Dynamite\DynamiteServiceProvider' not found

私の問題は何ですか?

4

2 に答える 2

9

ベンダー、パッケージ、およびクラスの命名方法とは何の関係もありませんでした。

私のcomposer.json(プロジェクトのルート)では、リポジトリタイプを に設定しましpackageたが、Composer のドキュメントのように、タイプパッケージは Composer をサポートしないパッケージ用であると述べています。そのため、Composer がautoload_classmap.phpファイルを更新していませんでした。

したがって、プライベート リポジトリ(Bitbucket や GitHub など) を使用する場合は、リポジトリのタイプを次のように設定する必要がありますgit

{
    "name": "laravel/laravel",
    ...
    "require": {
        "laravel/framework": "4.0.*",
        "houle/laravel-dynamite": "dev-master"
    },  
    "repositories": [{
        "type": "git",
        "url": "git@bitbucket.org:Houle/laravel-dynamite.git"       
    }],
    ...
}

それが誰かを助けることを願っています。

于 2013-10-01T02:28:25.903 に答える