我为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/"
}
},
...
我是如何创建我的包的:
更改 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
。
可能是我的问题?
答案 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文件吗?