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

时间:2013-09-29 15:30:06

标签: laravel laravel-4 composer-php

我为Laravel 4创建了一个在 workbench 中用于开发时正常工作的软件包,但是当我使用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"
            }
        }
    }],
    ...
    
  • 将我的包服务提供商添加到app / config / app.php:

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

这就是我的应用程序返回错误Class 'Fhoule\Dynamite\DynamiteServiceProvider' not found

可能是我的问题?

2 个答案:

答案 0 :(得分:8)

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

就是在我的composer.json(项目的根目录)中,我将我的存储库类型设置为package,但是像Composer文档中所说,类型package适用于不包含的软件包支持Composer。这就是Composer没有更新我的autoload_classmap.php文件的原因。

因此,如果您想使用private repository(比如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"       
    }],
    ...
}

希望它有所帮助。

答案 1 :(得分:0)

您的包中的composer.json(在BitBucket中找到的包)需要指定PSR-0自动加载组件,而不是顶级Laravel项目中的composer.json文件。

您能在私有存储库中向我们展示您的repo的composer.json文件吗?