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

Magento2.4自定义404页出现空对象调用get()、返回类型报错求助

Magento 2.4 自定义404控制器报错解决方案

报错根因说明

  1. 继承Magento\Framework\App\Action\Action报错:该抽象类构造依赖Magento\Framework\App\Action\Context实例,你的控制器没有声明构造方法传入该依赖,导致父类初始化时Context对象为null,触发空对象调用方法的错误。另外Magento 2.4起官方已不推荐直接继承该类,优先使用实现ActionInterface的方案。
  2. 实现ActionInterface后报无效返回类型错误:Magento控制器execute方法禁止直接输出内容,必须返回合规的响应实例,允许的返回类型为Magento\Framework\App\ResponseInterface或Magento\Framework\Controller\ResultInterface,直接echo后无合法返回值就会触发该异常。

正确实现代码

方案1:直接输出自定义内容(简单场景)

<?php
namespace SimplifiedMagento\RequestFlow\Controller\Page;

use Magento\Framework\App\ActionInterface;
use Magento\Framework\Controller\Result\RawFactory;

class CustomNoRoute implements ActionInterface
{
    public function __construct(
        private RawFactory $rawResultFactory
    ) {}

    public function execute()
    {
        $result = $this->rawResultFactory->create();
        // 标记为404状态码
        $result->setHttpResponseCode(404);
        $result->setContents('this is our custom 404');
        return $result;
    }
}

方案2:适配Magento前端布局(符合原生开发规范)

<?php
namespace SimplifiedMagento\RequestFlow\Controller\Page;

use Magento\Framework\App\ActionInterface;
use Magento\Framework\View\Result\PageFactory;

class CustomNoRoute implements ActionInterface
{
    public function __construct(
        private PageFactory $resultPageFactory
    ) {}

    public function execute()
    {
        $resultPage = $this->resultPageFactory->create();
        // 标记为404状态码
        $resultPage->setStatusHeader(404, '1.1', 'Not Found');
        $resultPage->getConfig()->getTitle()->set('404 页面未找到');
        // 可搭配对应layout.xml自定义页面块、样式,复用站点公共头尾
        return $resultPage;
    }
}

注意事项

  • 修改代码后需执行bin/magento setup:di:compile、bin/magento cache:clean命令生效。
  • 需在模块etc/frontend/routes.xml中配置no_route节点,或者配置noRouteHandler,才能让系统识别该控制器为自定义404页面。

内容的提问来源于stack exchange,提问作者askcoder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:15:02