【问题标题】:PHP class not found in Laravel controller在 Laravel 控制器中找不到 PHP 类
【发布时间】:2020-11-19 08:12:39
【问题描述】:

我在 Laravel 控制器中遇到问题,我不确定从哪里开始进行故障排除。基本上 2 个单独的方法正在调用同一个外部类; process 方法有效,但是在调用 process3d 时遇到错误 class 'App\Services\PaymentGateway\Gateway\RequestGatewayEntryPointList' not found.

DebugController.php

namespace App\Http\Controllers;
use App\Services\PaymentGateway\Gateway\RequestGatewayEntryPointList;
...
public function process(Request $request) {
   ...
   $rgeplRequestGatewayEntryPointList = new RequestGatewayEntryPointList;
   ...
}

public function process3d(Request $request) {
   ...
   $rgeplRequestGatewayEntryPointList = new RequestGatewayEntryPointList;
   ...
}

PaymentSystem.php

namespace App\Services\PaymentGateway\Gateway;
...
class RequestGatewayEntryPointList {
   ...
}

我省略了不相关的代码以保持问题简短,但如果有帮助,我当然很乐意提供更多详细信息。

发生了什么事?

【问题讨论】:

  • 你在同一个控制器中使用这两个函数,DebugController.php?
  • 是的,只是为了澄清-我是。然而,在 process 方法中,我引入了 PaymentSystem.php 文件,我忘记为 process3d 方法引入该文件。这就是问题所在。
  • 嗯,这是否意味着您在每个函数中都调用了“require_once”?如果是这样,那可能会起作用,但它绝对不是最好的方法,文件应该通过 composer 自动加载,并通过use 语句(如RequestGatewayEntryPointList)包含在控制器中

标签: php laravel namespaces


【解决方案1】:

在发布到 stackoverflow 5 分钟后找到它...哎呀。

process3d 缺少 require_once DIR.'/../../Services/PaymentGateway/Gateway/PaymentSystem.php';

添加这个解决了这个问题。

【讨论】:

  • 嗯,我希望这样的类是自动加载的,而不是手动需要的。你确定use Services/PaymentGateway/Gateway/PaymentSystem.php 或类似的不是你想要的吗? (请注意路径可能不正确,您需要检查它的确切位置)
  • 当您将 composer 作为自动加载器时,为什么要手动“要求”文件?只是好奇
  • 虽然需要手动解决问题,但它确实感觉像是一种解决方法,而不是一个干净的修复。但是我不确定问题是什么,或者如何解决它。 2分。 1.App/Services/PaymentGateway/Gateway/PaymentSystem.php不是一个类,它是一个包含许多类的php文件。 2 这是在 Laravel 项目的背景下,我认为这需要 PSR-4 合规性。我的理解是,鉴于 PaymentSystem.php 不是一个类,我不能在我的控制器中写 use App/Services/PaymentGateway/Gateway/PaymentSystem 并访问其中的类......?
猜你喜欢
  • 2016-02-16
  • 2021-10-24
  • 2014-09-25
  • 2018-12-15
  • 1970-01-01
  • 2021-08-17
  • 2014-01-02
  • 2019-02-05
相关资源
最近更新 更多