来自私有存储库的Laravel 4软件包:未找到ServiceProvider

FR6*_*FR6 1 laravel composer-php laravel-4

我为Laravel 4创建了一个在工作台中进行开发时正常工作的软件包,但是当我使用Composer安装它时,它会一直向我返回错误Class 'Myvendor\Mypackage\MypackageServiceProvider' not found.

我的包有一个特殊之处,就是我的类源的名称与我的包的名称不同.通常它们是相同的.

vendor/
    Houle/
        laravel-dynamite/
            src/
                Fhoule/
                    Dynamite/
                        DynamiteServiceProvider.php
Run Code Online (Sandbox Code Playgroud)

我知道它可以工作,因为Laravel的工作方式也是如此.

vendor/
    laravel/
        framework/
            src/
                Illuminate/
Run Code Online (Sandbox Code Playgroud)

我的包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/"
    }
},
...
Run Code Online (Sandbox Code Playgroud)

我如何创建我的包:

  • 与Artisan一起创建了这个包.
  • 使其在Workbench目录中正常工作
  • 推到私人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"
            }
        }
    }],
    ...
    
    Run Code Online (Sandbox Code Playgroud)
  • 将我的包服务提供程序添加到app/config/app.php:

    'providers' => array(
        'Fhoule\Dynamite\DynamiteServiceProvider',
    )
    
    Run Code Online (Sandbox Code Playgroud)

那是我的应用程序返回错误的地方Class 'Fhoule\Dynamite\DynamiteServiceProvider' not found.

可能是我的问题?

FR6*_*FR6 8

我发现了我的问题,它与我命名供应商,包和类的方式没有任何关系.

就是在我的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"       
    }],
    ...
}
Run Code Online (Sandbox Code Playgroud)

希望它可以帮助某人.