如何在子文件夹中使用 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\Classes
和 namespace App\Classes\NonWorking
。从控制器我尝试用 use App\Classes\NonWorking
和 use App\Classes\NonWorking\NonWorking
调用它,但我收到错误 Class 'App\Classes\NonWorking' not found
或 Class '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.
在我的新 laravel 应用程序中,我添加了两个自定义 classes。当我在控制器中使用它时,一个可以正常加载,但另一个位于另一个文件夹中,却无法正常工作。
我称之为 Working
的工作 class 位于 app\Classes
,它具有命名空间 namespace App\Classes
,在控制器中我用 use App\Classes\Working
.
我称之为 NonWorking
的非工作 class 位于 app\Classes\NonWorking
。我试过给它命名空间 namespace App\Classes
和 namespace App\Classes\NonWorking
。从控制器我尝试用 use App\Classes\NonWorking
和 use App\Classes\NonWorking\NonWorking
调用它,但我收到错误 Class 'App\Classes\NonWorking' not found
或 Class '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.