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 一起传递。
我已经设置了一个 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 一起传递。