我正在尝试从另一个文件夹调用我的模型文件。我已经提供了这两种文件结构。
我收到此错误:
未捕获的错误:在/Applications/XAMPP/xamppfiles/htdocs/pro/app/Scripts/Providers/1/Scrape.php:17
中找不到类'App \ Models \ Providers'
我正在从位于以下位置的脚本文件夹中调用模型文件:
app/Scripts/Providers/1/Scrape.php
这堂课我有以下内容:
namespace App\Scripts\Providers\1;
use App\Models;
模型文件位于:
app/Models/Providers.php
在此文件中,我具有以下内容:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
我没有共享这两个文件中的全部内容。如果您想查看这些文件的全部内容,请告诉我。
这是Scrape.php的样子
<?php
namespace App\Scripts\Providers\1;
use App\Models\Providers;
class Scrape {
public function __construct() {
$test = new \App\Models\Providers();
die(print_r($test, true));
}
}
$obj = new Scrape();
答案 0 :(得分:2)
您不能使用以数字开头的命名空间。
命名空间遵循相同的basic rules for variable names:
有效的变量 name以字母或下划线开头,后跟任意数量的字母,数字或下划线
(强调我的)。
因此,您的声明
namespace App\Scripts\Providers\1
基本上是无效。
从那时起,所有赌注都关闭了。
首先,将您的命名空间更改为有效的标识符(我建议您选择比数字更合理,更易识别的名称,您可以使用描述性名称,而没有理由 >不可以)
namespace App\Scripts\Providers\GroupWhatever
从逻辑上讲,您必须重命名此文件所在的文件夹。曾经是
app/Scripts/Providers/1/Scrape.php
因此将该目录重命名为
app/Scripts/Providers/GroupWhatever/Scrape.php
(在两种情况下,都应使用对您的应用程序和域有意义的替换GroupWhatever
)。
从那时起,如果类\App\Models\Providers
存在于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
上的composer autoload脚本。
基本上,将此行添加到Scrape.php
顶部附近:
require_once dirname( __DIR__ ) . '/../../../vendor/autoload.php';
(我想我放入了适当数量的go-up-dir路径段,但是请确保它与安装中的正确路径匹配。)
安装好后,将运行自动加载器,并找到类。
答案 1 :(得分:-2)
在您的Scrape.php
中,将您的命名空间更改为:
<?php
namespace App\Scripts\Providers\p1;
命名空间(甚至是嵌套或子命名空间)不能只是一个数字,它 必须以字母开头。例如,假设您要使用 软件包版本或API版本的命名空间:
namespace Mynamespace \ 1; //非法
请改为使用此:名称空间
Mynamespace \ v1; //好