如何在Laravel 5.1中自动加载自定义类?

时间:2015-08-10 11:07:05

标签: php laravel composer-php autoload

我在library文件夹中创建了一个app文件夹,以添加我自己的课程。

enter image description here

这是文件app/library/helper.php的内容:

<?php

namespace Library;

class MyHelper
{
    public function v($arr)
    {
        var_dump($arr);
    }
}

我将命名空间添加到composer.json

enter image description here

然后我跑了

$ composer dump-autoload

但它似乎没有任何影响。

文件

  • vendor/composer/autoload_psr4.php
  • vendor/composer/autoload_classmap.php

没有改变。

如果我尝试创建MyHelper的实例,Laravel会报告以下错误:

enter image description here

我不确定我做错了什么。

4 个答案:

答案 0 :(得分:6)

您的自动加载配置几乎不错,但您有

  • 错误地命名了
  • 路径错误

要解决此问题,请调整自动加载配置:

{
    "autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    }
}

然后将目录/library重命名为/Library(注意案例)。

然后将文件/app/Library/helper.php重命名为/app/Library/MyHelper.php(注意类名称应与文件名匹配)。

然后调整/app/Library/MyHelper提供的类的名称空间以匹配PSR-4前缀(以及项目的结构),以及类的用法:

namespace App\Library;

class MyHelper 
{
    public function v($arr)
    {
        var_dump($arr);
    }
}

供参考,见:

答案 1 :(得分:2)

files中使用composer.json指令:https://getcomposer.org/doc/04-schema.md#files

{
    "autoload": {
        "files": ["app/library/helper.php"]
    }
}

答案 2 :(得分:0)

我知道这个问题已经回答了一段时间,但它不起作用的原因是你需要给出与文件结构相对应的命名空间。因此,由于Library类位于App文件夹中,您需要:

namespace App\Library;

class MyHelper{
    public function v($arr){
        var_dump($arr);
    }
}

此外,如果要打电话给班级MyHelper,则需要调用文件MyHelper.php

答案 3 :(得分:-1)

使用composer.json:

   "autoload": {
    "classmap": [
        "database",
        "app/Transformers"
    ]
 },

添加自动加载目录,例如我添加了app / Transformers。

不要忘记添加运行composer dump-autoload

此方法的唯一问题是,无论何时添加新类,都需要运行composer dump-autoload

或者您可以使用&#34;文件&#34;在composer.json中。

"autoload": {
    "files": ["src/MyLibrary/functions.php"]
}