如何在子文件夹中使用 Laravel 中的自定义 class?

How to use a custom class in Laravel when it is in a sub-folder?

在我的新 laravel 应用程序中,我添加了两个自定义 classes。当我在控制器中使用它时,一个可以正常加载,但另一个位于另一个文件夹中,却无法正常工作。

我称之为 Working 的工作 class 位于 app\Classes,它具有命名空间 namespace App\Classes,在控制器中我用 use App\Classes\Working.

我称之为 NonWorking 的非工作 class 位于 app\Classes\NonWorking。我试过给它命名空间 namespace App\Classesnamespace App\Classes\NonWorking。从控制器我尝试用 use App\Classes\NonWorkinguse App\Classes\NonWorking\NonWorking 调用它,但我收到错误 Class 'App\Classes\NonWorking' not foundClass 'App\Classes\NonWorking\NonWorking' not found.

通过将 NonWorking class 移动到与 Working class 相同的文件夹并将命名空间设置为 namespace App\Classes,但是 NonWorking class 来自另一个 repo,应该在它自己的文件夹中,因为它不会是另一个 repo 中唯一的一个。

那么,我如何让 Laravel 了解这个 class 在哪里?

要解决您的问题,只需在 App 文件夹中创建您的文件夹和 类 并使用 运行 命令:

composer dump-autoload

他们会加载您创建的所有 类

Laravel 使用 PSR-4 autoloading。这意味着基本上您的 class 应该遵循文件夹结构。

因此,如果您在 app/Classes 中有 class 个元素,它们应该具有命名空间 App\Classes.

因此文件 app/Classes/Working.php 将在其顶部 namespace App\Classes; 并将其导入另一个文件,您在另一个文件中写入 use App\Classes\Working;

如果 app/Classes/SubFolder 中有一个 class,它应该有命名空间 namespace App\Classes\SubFolder; 所以这是 app/Classes/SubFolder/AmazingClass.php 文件中的 class AmazingClass

// app/Classes/SubFolder/AmazingClass.php

namespace App\Classes\SubFolder;

class AmazingClass
{
    //
}

让我们在另一个 class 中使用 AmazingClass

// Some file in another namespace

namespace App\My\Random;

use App\Classes\SubFolder\AmazingClass;

// Rest of the file

另外:每当您添加一个新的 class 并且您无法使用它时,很可能它没有自动加载。 运行命令

composer dump-autoload

到re-autoload classes.