Php 未捕获错误“;“未找到类”;在拉威尔5.8
我正在尝试从另一个文件夹调用我的模型文件。我已经提供了这两种文件结构 我得到这个错误: 未捕获错误:在/Applications/XAMPP/xamppfiles/htdocs/pro/App/Scripts/Providers/1/scrap.php:17中找不到类“App\Models\Providers” 我正在从位于以下位置的脚本文件夹调用模型文件:Php 未捕获错误“;“未找到类”;在拉威尔5.8,php,laravel,oop,composer-php,Php,Laravel,Oop,Composer Php,我正在尝试从另一个文件夹调用我的模型文件。我已经提供了这两种文件结构 我得到这个错误: 未捕获错误:在/Applications/XAMPP/xamppfiles/htdocs/pro/App/Scripts/Providers/1/scrap.php:17中找不到类“App\Models\Providers” 我正在从位于以下位置的脚本文件夹调用模型文件: app/Scripts/Providers/1/Scrape.php app/Models/Providers.php 在本课程中,我
app/Scripts/Providers/1/Scrape.php
app/Models/Providers.php
在本课程中,我有以下几点:
namespace App\Scripts\Providers\1;
use App\Models;
模型文件位于:
app/Scripts/Providers/1/Scrape.php
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();
在scrap.php
中,将名称空间更改为:
<?php
namespace App\Scripts\Providers\p1;
在scrap.php
中,将名称空间更改为:
<?php
namespace App\Scripts\Providers\p1;
名称空间不能以数字开头
名称空间遵循相同的规则:
有效变量名称以字母或下划线开头,后跟任意数量的字母、数字或下划线
(我的重点)
因此,你的声明
namespace-App\Scripts\Providers\1
基本上是无效的
从那以后,所有的赌注都输光了
首先,将名称空间更改为有效标识符(我建议选择比数字更合理、更易识别的名称,您可以使用描述性名称,并且没有理由不这样做):
从逻辑上讲,您必须重命名此文件所在的文件夹。过去是这样
app/Scripts/Providers/1/scrap.php
因此,将该目录重命名为
app/Scripts/Providers/groupwhere/Scrape.php
(在这两种情况下,用对您的应用程序和域有意义的内容替换groupwhere
)
从那时起,如果类\App\Models\Providers
存在于App/Models/Providers.php
,它应该可以工作
重要:
另一个可能存在的问题是,不太清楚什么是Scripts/Scrape.php
,或者如何调用它
如果您在Laravel中通过调用Laravel控制器或控制台应用程序来执行Scrape.php
,这应该可以工作。
如果您直接调用此脚本(例如,通过执行php-app/Scripts/Providers/1/scrap.php
(或更正的app/Scripts/Providers/groupwhere/scrap.php
),这根本不起作用,因为自动加载逻辑根本不运行
如果您是手动执行脚本,在上述更改的基础上您需要包含composer autoload脚本,该脚本位于vendor/autoload.php
基本上,将这一行添加到scrap.php的顶部附近:
require_once dirname(u DIR_u)。'/../../../../../vendor/autoload.php';
(我想我放了适当数量的上升一个方向的路径段,但您要确保它与安装中的正确路径相匹配)
一旦安装到位,自动加载程序将运行,并找到类。您不能有以数字开头的命名空间
名称空间遵循相同的规则:
有效变量名称以字母或下划线开头,后跟任意数量的字母、数字或下划线
(我的重点)
因此,你的声明
namespace-App\Scripts\Providers\1
基本上是无效的
从那以后,所有的赌注都输光了
首先,将名称空间更改为有效标识符(我建议选择比数字更合理、更易识别的名称,您可以使用描述性名称,并且没有理由不这样做):
从逻辑上讲,您必须重命名此文件所在的文件夹
app/Scripts/Providers/1/scrap.php
因此,将该目录重命名为
app/Scripts/Providers/groupwhere/Scrape.php
(在这两种情况下,用对您的应用程序和域有意义的内容替换groupwhere
)
从那时起,如果类\App\Models\Providers
存在于App/Models/Providers.php
,它应该可以工作
重要:
另一个可能存在的问题是,不太清楚什么是Scripts/Scrape.php
,或者如何调用它
如果您在Laravel中通过调用Laravel控制器或控制台应用程序来执行Scrape.php
,这应该可以工作。
如果您直接调用此脚本(例如,通过执行php-app/Scripts/Providers/1/scrap.php
(或更正的app/Scripts/Providers/groupwhere/scrap.php
),这根本不起作用,因为自动加载逻辑根本不运行
如果您是手动执行脚本,在上述更改的基础上您需要包含composer autoload脚本,该脚本位于vendor/autoload.php
基本上,将这一行添加到scrap.php的顶部附近:
require_once dirname(u DIR_u)。'/../../../../../vendor/autoload.php';
(我想我放了适当数量的上升一个方向的路径段,但您要确保它与安装中的正确路径相匹配)
一旦安装到位,自动加载程序将运行,并且会找到类。我猜他有自动加载问题,他应该转储自动加载。不太可能,@Thamer。他们指的是App\Model
命名空间中的一个类,来自App\Scripts
命名空间中的另一个类。如果一个类正在自动加载,另一个类将自动加载也应该自动加载。我相信更可能的问题是他们试图直接执行Scrape.php
,因此根本不执行自动加载程序。@yivi I ha