【问题标题】:Custom module controller not working自定义模块控制器不起作用
【发布时间】:2026-01-15 05:25:01
【问题描述】:

我在 Magento 2 中添加了一个示例自定义模块。我有两个用于管理面板页面的控制器功能,

http://127.0.0.1/magento2/admin_magento2/sample/index/index/
http://127.0.0.1/magento2/admin_magento2/sample/sampletwo/index/

第一个 url 仅显示页面。第二个显示 404 或重定向到仪表板。

请帮助我解决这个问题。

注意

我只为第一个网址添加了管理面板菜单。

【问题讨论】:

    标签: magento2


    【解决方案1】:

    当尝试访问后端 (Adminhtml) 中的模块/功能时,Magento 会检查是否存在秘密 Form Keys,以及是否/当有人尝试访问某个操作但未提供有效的 FormKey 和/或提供无效的 FormKey - Adminhtml AbstractAction (Magento\Backend\App\AbstractAction) 将路由用户 Admin UIX 定义的启动页面(通常是仪表板页面)

    [此机制提供“安全检查点”,以防止用户访问他们无权访问的后端部分]


    要防止检查 FormKey,您有两个选择:

    (a) 关闭 FormKey 验证

    导航:商店 -> 设置:配置 -> 高级:管理员 -> 安全 -> 将“向 URL 添加密钥”设置为“否”

    请务必记住,这样做会关闭密钥验证,因此可能使您的应用程序易受攻击。

    (b) 关闭控制器的 FormKey 验证

    在 Admin Controller 的“$_publicActions”属性中指定您希望免除 FormKey 检查的操作。

    受保护的 $_publicActions = ['ENTER_NAME_OF_ACTION'];

    代码示例:

    class Index extends \Magento\Backend\App\Action
    {
        protected $_publicActions = ['index'];
    
        public function execute()
        {
            echo "My Hello World! Controller";
        }
    
    }
    

    从 Admin UIX 菜单访问选项时 - Magento 会自动为您添加 FormKey。这就是为什么您可以访问第一个 URL 而无法访问第二个 URL。

    【讨论】:

      最近更新 更多