Laravel 5.8 中未捕获的错误"Class not found"



我正在尝试从另一个文件夹调用我的模型文件。我已经提供了这两个文件结构。

我收到此错误:

未捕获的错误:在/Applications/XAMPP/xamppfiles/htdocs/pro/app/Scripts/Providers/1/Scrape.php:17 中找不到类"应用程序\模型\提供程序">

我正在从位于以下的脚本文件夹调用模型文件:

app/Scripts/Providers/1/Scrape.php

在这个课程中,我有以下内容:

namespace AppScriptsProviders1;
use AppModels;

模型文件位于:

app/Models/Providers.php

在这个文件中,我有以下内容:

namespace AppModels;
use IlluminateDatabaseEloquentModel;

我没有共享这两个文件中的完整内容。如果您想查看这些文件的完整内容,请告诉我。

这就是刮擦.php的样子

<?php
namespace AppScriptsProviders1;
use AppModelsProviders;
class Scrape {
public function __construct() {
$test = new AppModelsProviders();
die(print_r($test, true));
}
}
$obj = new Scrape();

不能有以数字开头的命名空间。

命名空间遵循相同的变量名称基本规则:

有效的变量名称以字母或下划线

开头,后跟任意数量的字母、数字或下划线

(强调我的)。

因此,您的声明

namespace AppScriptsProviders1

基本上是无效的。

从那时起,所有的赌注都关闭了。

首先,将您的命名空间更改为有效的标识符(我建议选择比数字更合理和可识别的东西,您可以拥有描述性名称,根本没有理由不这样做):

namespace AppScriptsProvidersGroupWhatever

从逻辑上讲,您必须重命名此文件所在的文件夹。它曾经是

app/Scripts/Providers/1/Scrape.php

因此将该目录重命名为

app/Scripts/Providers/GroupWhatever/Scrape.php

(在这两种情况下,请将GroupWhatever替换为对应用程序和域有意义的内容)。

从那时起,如果类AppModelsProviders存在于app/Models/Providers.php,它应该可以工作。

重要:

可能存在的另一个问题是,Scripts/Scrape.php是什么或如何称呼它不是很清楚。

如果您通过调用 Laravel 控制器或控制台应用程序从 Laravel 内部执行Scrape.php,这应该有效。

如果您直接调用此脚本(例如,通过执行php app/Scripts/Providers/1/Scrape.php(或更正的app/Scripts/Providers/GroupWhatever/Scrape.php),则这根本不起作用,因为自动加载逻辑根本不运行。

如果您手动执行脚本,除了上述更改之外,您还需要包括作曲家自动加载脚本,该脚本位于vendor/autoload.php.

基本上,在靠近Scrape.php顶部添加此行:

require_once dirname( __DIR__ ) . '/../../../vendor/autoload.php';

(我想我放置了适当数量的上升一目录路径段,但您要确保它与安装中的正确路径匹配)。

一旦就位,将自动加载器运行,并找到类。

Scrape.php中,将命名空间更改为:

<?php
namespace AppScriptsProvidersp1;

来自PHP手册注释,

命名空间

(即使是嵌套或子命名空间)不能只是一个数字,它 必须以字母开头。例如,假设您想使用 用于包版本控制或 API 版本控制的命名空间:

命名空间 Mynamespace\1; 非法

而是使用这个:命名空间

Mynamespace\v1;//OK

相关内容

  • 没有找到相关文章

最新更新