Magento 2 后台订单详情页添加自定义按钮点击报404问题求助
修复步骤
1. 修正控制器目录与命名空间大小写
Magento 2 路由匹配对目录大小写敏感,你当前的控制器路径/app/code/MG/Dropship/Controller/AdminHtml/Order/Index.php中,AdminHtml需要改为首字母大写其余小写的Adminhtml:
- 重命名目录:将
AdminHtml改为Adminhtml - 同步修改控制器内的命名空间:
<?php // 把原来的AdminHtml改为Adminhtml namespace MG\Dropship\Controller\Adminhtml\Order; class Index extends \Magento\Sales\Controller\Adminhtml\Order { // 原有逻辑保持不变 }
2. 跳转URL补充order_id参数
你的控制器内调用$this->_initOrder()需要从请求参数中获取订单ID才能初始化订单对象,参数缺失会直接返回404。修改AddCustomButton.php内的URL生成逻辑:
if ($context->getRequest()->getFullActionName() == 'sales_order_view') { // 新增获取当前订单ID的逻辑 $orderId = $context->getRequest()->getParam('order_id'); // 生成URL时传递order_id参数 $url = $context->getUrl('mg_dropship/order/index', ['order_id' => $orderId]); $buttonList->add( 'customButton', ['label' => __('Do Something'), 'onclick' => 'setLocation("' . $url . '")', 'class' => 'reset'], -1 ); }
3. 新增ACL权限配置文件
你控制器_isAllowed方法校验的MG_Dropship::order_dosomething权限没有定义,权限校验不通过也会返回404。新建/app/code/MG/Dropship/etc/acl.xml文件:
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd"> <acl> <resources> <resource id="Magento_Sales::sales" title="Sales"> <resource id="Magento_Sales::sales_order" title="Orders"> <resource id="MG_Dropship::order_dosomething" title="执行Dropship操作"/> </resource> </resource> </resources> </acl> </config>
4. 生效修改操作
修改完成后执行以下命令生效:
# 清理缓存 bin/magento cache:clean # 生产环境需要额外执行编译 bin/magento setup:di:compile
最后进入后台系统 > 权限 > 用户角色,给对应角色勾选新增的执行Dropship操作权限即可。
关于后台URL密钥的问题:使用Magento原生
getUrl方法生成后台路由时,会自动拼接安全密钥,无需额外开发,修改完成后开启密钥功能也可正常运行。
内容的提问来源于stack exchange,提问作者user1625155
相关产品推荐
相关产品推荐

