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

Ger*_*awn 9 php autoload laravel composer-php

我在library文件夹中创建了一个文件app夹来添加我自己的类.

在此输入图像描述

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

<?php

namespace Library;

class MyHelper
{
    public function v($arr)
    {
        var_dump($arr);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

然后我跑了

$ composer dump-autoload
Run Code Online (Sandbox Code Playgroud)

但它似乎没有任何影响.

文件

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

没改变.

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

在此输入图像描述

我不确定我做错了什么.

Max*_*nin 8

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

{
    "autoload": {
        "files": ["app/library/helper.php"]
    }
}
Run Code Online (Sandbox Code Playgroud)


loc*_*inz 6

你的自动加载配置几乎是好的,但你有

  • 命名空间错了
  • 弄错了路

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

{
    "autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后将目录重命名/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);
    }
}
Run Code Online (Sandbox Code Playgroud)

供参考,请参阅: