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"
            }
        }
    }],
    ...
    
  • 将我的包服务提供者添加到 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 回答
0

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

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

于 2013-09-30T12:59:30.487 回答