Laravel包不自动加载 - Laravel 5.2

时间:2016-01-23 13:25:42

标签: php laravel laravel-5.2

我正在建造一个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并按照说明

2 个答案:

答案 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