我正在建造一个laravel包,但它不会自动加载。
这是我的套餐的自动加载部分:
"autoload": {
"classmap": [
"src"
],
"psr-4": {
"Doitonlinemedia\\Translatableroutes\\": "src/"
}
}
类的命名空间与Doitonlinemedia\Translatableroutes
文件夹结构如下:
- vendor
- - doitonlinemedia
- - - translatableroutes
- - - - composer.json
- - - - src
- - - - - class1.php
我在app.php中添加了ServiceProvider,如:
Doitonlinemedia\Translatableroutes\TranslatableRoutesServiceProvider::class
但它一直说 Class'Doitonlinemedia \ Translatableroutes \ TranslatableRoutesServiceProvider'未找到
每次更改都运行composer dump-autoload
。
我做错了什么?
修改
对于开发,我在主composer.json文件中添加了"Doitonlinemedia\\Translatableroutes\\": "packages/doitonlinemedia/translatableroutes/src"
。但是当我将这个作曲家包装到一个新项目中时,我遇到了上述问题。
试用此套餐:https://github.com/doitonlinemedia/TranslatableRoutes并按照说明
答案 0 :(得分:4)
PHP命名空间区分大小写。 你必须将它放入你的composer.json
"psr-4": {
"Doitonlinemedia\\Translatableroutes\\": "src/"
}
而不是
"psr-4": {
"doitonlinemedia\\translatableroutes\\": "src/"
}
对我而言,它也没有
classmap
选项
再次运行composer dump-autoload
并重试。
修改强>
这对我有用
{
"name": "doitonlinemedia/translatableroutes",
"description": "Create translatable resource routes",
"authors": [
{
"name": "Tim van Uum",
"email": "tim@doitonlinemedia.nl"
}
],
"minimum-stability": "stable",
"license": "MIT",
"require": {
"php": ">=5.3.0"
},
"autoload": {
"classmap": [
"src"
],
"psr-4": {
"Doitonlinemedia\\Translatableroutes\\": "src/"
}
}
}
此外,您应该将此包添加到您的要求"illuminate/support": "~5.2"
。
注意:如果未更新,则作曲家似乎不刷新位于供应商软件包中的composer.json
个文件的自动加载条目。
编辑后,您必须将其推入存储库。在项目中重新安装包。
如果您仍在积极开发包装,我建议您按照以下说明设置环境:Developing your packages in Laravel 5。
在不重新安装或更新远程存储库的情况下开发软件包要容易得多。
答案 1 :(得分:0)
感谢laracast论坛的一些帮助。我发现我的项目有点腐败我想,因为包已经有效了。
https://laracasts.com/discuss/channels/laravel/trouble-autoloading-custom-package-laravel-52