如何解决当它位于子文件夹中时,如何在Laravel中使用自定义类?
在新的laravel应用中,我添加了两个自定义类。当我在控制器中使用它时,一个可以很好地加载,但是另一个文件夹中的另一个则无法正常工作。
我将称为Working
的工作类位于app\Classes
中,它具有名称空间namespace App\Classes
,在控制器中,我用use App\Classes\Working
对其进行命名。
我称之为NonWorking
的非工作类位于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类移至Working类所在的文件夹并将命名空间设置为namespace App\Classes
,我已经能够使其正常运行,但是NonWorking类来自另一个仓库,应该位于它自己的文件夹,因为它不是另一个仓库中唯一的文件夹。
那么,如何让Laravel了解此类的位置?
解决方法
Laravel使用PSR-4 autoloading。这基本上意味着您的班级应该遵循文件夹结构。
因此,如果您在app/Classes
中有类,则它们应具有名称空间App\Classes
。
因此,文件app/Classes/Working.php
的顶部为namespace App\Classes;
,要将其导入另一个文件,请在另一个文件use App\Classes\Working;
中写入
如果您在app/Classes/SubFolder
中有一个类,则它应该具有名称空间namespace App\Classes\SubFolder;
因此,这是AmazingClass
文件中的类app/Classes/SubFolder/AmazingClass.php
:
// app/Classes/SubFolder/AmazingClass.php
namespace App\Classes\SubFolder;
class AmazingClass
{
//
}
让我们在另一堂课中使用AmazingClass
。
// Some file in another namespace
namespace App\My\Random;
use App\Classes\SubFolder\AmazingClass;
// Rest of the file
Plus:每当您添加新类并且无法使用它时,很可能不会自动加载它。运行命令
composer dump-autoload
重新自动加载类。
,要解决您的问题,只需在App文件夹中创建文件夹和类并运行命令:
composer dump-autoload
,它们会加载您创建的所有类
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。