我正在尝试从另一个文件夹调用我的模型文件。我已经提供了这两个文件结构。
我收到此错误:
未捕获的错误:在/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