繁体   English   中英

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

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

在我的新 laravel 应用程序中,我添加了两个自定义类。 当我在 controller 中使用它时,一个加载正常,但另一个文件夹中的另一个不起作用。

工作的 class(我将其称为Working )位于app\Classes中,它具有命名namespace App\Classes ,在 controller 中,我用use App\Classes\Working调用它。

非工作 class,我称之为NonWorking位于app\Classes\NonWorking中。 我试过给它命名空间命名namespace App\Classesnamespace App\Classes\NonWorking From the controller I've tried calling it with use App\Classes\NonWorking and use App\Classes\NonWorking\NonWorking , but I get the error Class 'App\Classes\NonWorking' not found or Class 'App\Classes\NonWorking\NonWorking' not found

我已经能够通过将 NonWorking class 移动到与 Working class 相同的文件夹中并将命名空间设置为命名namespace App\Classes来使其正常运行,但是 NonWorking ZA2F2ED4F8EBC2CBB4C21A29DC40AB 应该位于另一个自己的文件夹中它不会是另一个回购的唯一一个。

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

Laravel 使用PSR-4 自动加载 这意味着基本上你的 class 应该遵循文件夹结构。

因此,如果您在app/Classes中有类,它们应该具有命名空间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

重新自动加载类。

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

composer dump-autoload

他们加载您创建的所有类

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM