Magento 2 模块处理显示在控制器中处理的数据

Magento 2 Module Handling Displaying Data proccessed in Controller

我已经设置了一个 Magento 2 模块来使用表单从用户那里收集一些数据。提交表单时,控制器应处理该数据,然后在另一个页面上显示结果。我在让控制器重定向到包含数据的结果页面时遇到问题。这是我目前的设置:

块文件 vendor\MyModule\Block\Index.php

    public function getManualFormAction()
    {
        return $this->getUrl('mamform/index/post');
    }

模板文件 vendor\MyModule\view\frontend\templates\index.phtml

<form action="<?= $block->escapeUrl($block->getManualFormAction()) ?>" >
...
</form>

控制器文件 vendor\MyModule\Controller\Index\Post.php

public function execute()
    {
        $post = $this->getRequest()->getPostValue();
        var_dump($post);

        // handle and proccess data
       
        // The data processed should be displayed in the Result page
    }

结果控制器vendor\MyModule\Controller\Index\Result.php

public function execute()
    {
        $resultPage = $this->resultPageFactory->create();
        return $resultPage;
    }

结果模板vendor\MyModule\view\frontend\templates\result.phtml

<h1>Results appears here</h1>

模块路线vendor\MyModule\etc\frontend\routes.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="standard">
        <route frontName="mamform" id="mamform">
            <module name="vendor_MyModule" />
        </route>
    </router>
</config>

结果布局vendor\MyModule\view\frontend\layout\mamform_index_result.xml

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceContainer name="content">
            <block class="vendor\myModule\Block\Index" name="mam_result" template="vendor_myModule::result.phtml"></block>
        </referenceContainer>
    </body>
</page>

目前,如果我访问 /mamform/result ,我可以看到模板按预期工作。 Post Controller 处理后的数据如何传递,并显示在结果页面?

您要查找的是重定向结果。

在您的 Post 控制器中,您可以像这样创建重定向对象:

<?php
public function execute() {
    $post = $this->getRequest()->getPostValue();
    // handle and process data
    // The data processed should be displayed in the Result page
    $result = $this->resultRedirectFactory->create();
    $result->setPath("path to your result controller", [$post, any_other_params]);
    return $result;
}
?>

这将创建重定向结果,并将调用您作为 setPath 的第一个参数传递的任何控制器路由的执行方法,并且数组将与 url 一起传递。