Laravel和Xdebug - 由于致命错误:找不到所有控制器都继承的控制器类,我无法进行调试

3
所以我成功地为PHP 7(7.0.4)配置了Xdebug(2.4.0)。但是我无法在我的Laravel项目中使用它。我试图调试CartController中的一段代码块。然而,它显示出错误,因为找不到CartController继承的控制器。这是我在PhpStorm控制台中得到的信息:

C:\xampp\php\php.exe -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=127.0.0.1 C:\Users\Nikolay\Dropbox\store\app\Http\Controllers\CartController.php PHP Fatal error: Class 'App\Http\Controllers\Controller' not found in C:\Users\Nikolay\Dropbox\store\app\Http\Controllers\CartController.php on line 14 PHP Stack trace: PHP 1. {main}() C:\Users\Nikolay\Dropbox\store\app\Http\Controllers\CartController.php:0

Fatal error: Class 'App\Http\Controllers\Controller' not found in C:\Users\Nikolay\Dropbox\store\app\Http\Controllers\CartController.php on line 14

Call Stack: 2.1491 376944 1. {main}() C:\Users\Nikolay\Dropbox\store\app\Http\Controllers\CartController.php:0

Process finished with exit code 255

当我在服务器上运行应用程序时,没有问题。如何解决这个问题,为什么会出现这个问题? 编辑 -2016年5月28日-这是CartController:
<?php

namespace App\Http\Controllers;

use App\Cart;
use App\CartItem;
use App\Product;
use Illuminate\Http\Request;

use App\Http\Requests;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;

class CartController extends Controller
{
    public function showCart() {...}

    public function addItem(Request $request, $product_id) {...}

    public function deleteItem($product_id, $size) {...}

    public function showCheckout() {...}

    private function calculateTotalPrice() {...}
}

你应该在这里粘贴相关的类代码,以及类文件名。检查两者之间的大写字母是否匹配。 - Luís Cruz
我更新了我的问题,但是我尝试调试每个控制器时都会得到完全相同的错误。 - Codearts
你是否检查了 C:\Users\Nikolay\Dropbox\store\app\Http\Controllers 目录下的 Controller.php 文件是否存在?如果存在,那么请确认该类的命名空间是否为 namespace App\Http\Controllers;,并且类名是否为 Controller - Luís Cruz
是的,它是相同的命名空间。控制器存在。应用程序可以工作,但调试器不起作用。 - Codearts
问题的唯一合乎逻辑的解释是调试器无法加载类。正如您所知,Laravel 使用 Composer 具有两个目的:包管理器和自动加载器。因此,如果应用程序可以工作但调试器无法工作,则意味着调试器无法找到/加载包含类名称的 Composer 文件。请查看 此链接 以获取类似于您的情况。还要检查调试器的设置并验证是否可以指向自动加载文件 (/vendor/autoload.php)。 - Luís Cruz
3个回答

4
我可能错了...但感觉你是想在不经过引导/路由等步骤的情况下调试控制器?

因为所有引导、实例化、依赖注入等都已完成,所以您的应用程序在服务器上运行。

要调试应用程序流程,您可以在控制器方法中使用断点调试public/index.php,并在 index.php 中手动设置/覆盖$_SERVER['REQUEST_URI']以调试您想要的路由,或者安装xdebug浏览器扩展,在PHPStorm中启动调试监听器,然后在浏览器中访问您的路由。


0

我曾经遇到过同样的问题,使用任何IDE编辑器(无论是使用netbeans还是VS code)。问题在于我从除主索引文件index.php(自动加载程序文件)以外的文件开始调试。当我从index.php文件开始时,一切都开始正常工作了。我将逐步解释如何进行更正。

  1. 找到正确的php.ini文件。在/var/www/html/中创建一个info.php文件并编写以下内容:

然后在浏览器中浏览此文件并定位php.ini。还要从中确定您的系统具有哪个xdebug版本。

  1. 首先配置xdebug(在此php.ini文件中)。目前有两个主要的xdebug版本(截至撰写本文的时间)。 a. XDebug 2 b. XDebug 3

在此php.ini文件的最后创建一个xdebug部分。

[xdebug]
  1. XDebug 2有以下设置:

    zend_extension=/usr/lib/php/20170718/xdebug.so xdebug.default_enable=1 xdebug.remote_enable=on xdebug.remote_handler=dbgp xdebug.remote_host=localhost xdebug.remote_port=9000

将路径更改为您拥有的xdebug路径。使用此命令查找xdebug。

find /usr/lib/php -iname xdebug.so

如果你安装了多个版本的PHP,你会得到多个xdebug。要知道你将使用哪一个,只需卸载和重新安装xdebug并查看它消失和重新出现的文件夹即可。例如,要知道PHP7.4正在使用哪个版本,请卸载php7.4-xdebug模块,然后再安装它;使用

sudo apt remove php7.4-xdebug

然后再使用安装它

sudo apt install php7.4-xdebug

而 Xdebug 3 则使用了这些设置

 zend_extension=/usr/lib/php/20190902/xdebug.so
 xdebug.mode=debug
 xdebug.client_host=localhost
 xdebug.remote_port=9003

一些设置在两个版本中是相同的

 xdebug.profiler_output_dir=/tmp
 xdebug.profiler_output_name=cachegrind.out.%p
 xdebug.profiler_enable_trigger=1
 xdebug.profiler_enable=0
 xdebug.remote_autostart=1
 xdebug.idekey="netbeans-xdebug"

将xdebug.idekey更改为vsc,适用于VS Code、PhpStorm等IDE

  1. 启动您的IDE并打开Laravel项目。例如,在VScode中打开文件夹并选择您的项目文件夹

  2. 在public文件夹中打开主要的index.php文件

然后开始调试


0
我正在使用VsCode。 在Laravel项目的根目录中,我创建了一个.vscode文件夹。在这个新文件夹中,我创建了一个launch.json文件 包含以下内容:
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Listen for XDebug",
      "type": "php",
      "request": "launch",
      "port": 9000,
      "pathMappings": {
        "/var/www/html": "${workspaceFolder}/"
      },
      "xdebugSettings": {
        "max_data": -1,
        "show_hidden": 1,
        "max_children": 100,
        "max_depth": 5
      }
    }
  ]
}

1
请在您的答案中添加支持性细节以改进它。 - Ethan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接