You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP8.1+Xdebug3.3环境下PhpStorm调试Magento控制器报错求助

直接运行Magento控制器文件调试时出现类找不到错误

环境信息

  • PHP 8.1
  • Xdebug 3.3
  • PhpStorm
  • Magento项目

报错信息

/bin/php -dxdebug.mode=debug -dxdebug.client_port=9003 -dxdebug.client_host=127.0.0.1 /var/www/html/thang/app/code/Smartosc/Thang/Controller/Index/Index.php
PHP Fatal error:  Uncaught Error: Class "Magento\Framework\App\Action\Action" not found in /var/www/html/thang/app/code/Smartosc/Thang/Controller/Index/Index.php:5
Stack trace:
#0 {main}
  thrown in /var/www/html/thang/app/code/Smartosc/Thang/Controller/Index/Index.php on line 5

Process finished with exit code 129 (interrupted by signal 1:SIGHUP)

控制器代码

<?php
namespace Smartosc\Thang\Controller\Index;

use Magento\Catalog\Model\ResourceModel\Category\CollectionFactory;
class Index extends \Magento\Framework\App\Action\Action
{
    protected $_pageFactory;
    protected $categoryCollectionFactory;
    protected $_category;

    public function __construct(
        \Magento\Catalog\Model\Category $category,
        \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoryCollectionFactory,
        \Magento\Framework\App\Action\Context $context,
        \Magento\Framework\View\Result\PageFactory $pageFactory)
    {
        $this->categoryCollectionFactory = $categoryCollectionFactory;
        $this->_category = $category;
        $this->_pageFactory = $pageFactory;
        return parent::__construct($context);
    }

    public function execute()
    {
        $categoryId = 5; // 您要显示的分类ID
        $category = $this->_category->load($categoryId);
        echo "<pre>";
        print_r($category->getData());
        echo "</pre>";
        $collection = $this->categoryCollectionFactory->create();
        $collection->addIdFilter([12,13]);
        $collection->addAttributeToSelect(['name','include_in_menu']);
        $collection->load();
        foreach ($collection as $category) {
            echo "<pre>";
            $name = $category->getData('name');
            $includeInMenu = $category->getData('include_in_menu');
            $id = $category->getData('entity_id');
            if ($name !== null && $includeInMenu !== null) {
                $categoryData = [
                    'name' => $name,
                    'include_in_menu' => $includeInMenu,
                    'id'=>$id
                ];
                print_r($categoryData);
            }
            echo "</pre>";
        }
        echo "Hello World 33";
        exit;
    }
}

问题描述

该控制器在网页端运行正常,但直接运行文件调试时出现类找不到的错误,已尝试执行Composer命令、检查模块有效性,问题仍未解决,需了解报错原因。

报错原因

  1. Magento框架依赖环境未初始化:Magento是基于依赖注入的框架,类的加载依赖框架的自动加载机制和初始化流程。直接单独运行控制器文件时,PHP无法触发Magento的核心初始化逻辑,也就无法加载Composer自动加载器或Magento的类映射,导致无法找到Magento\Framework\App\Action\Action这类框架核心类。
  2. 网页端与直接运行的环境差异:网页端请求会通过Magento的入口文件(index.php),该文件会完成框架自动加载器初始化、依赖注入容器构建等核心操作,因此能正确解析所有命名空间下的类;而直接运行控制器文件相当于脱离了Magento的完整运行环境,PHP只能识别当前文件,无法解析Magento命名空间对应的类文件路径。

内容的提问来源于stack exchange,提问作者1167_Cao Tiến Thăng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 10:28:30