Magento 2 простая форма отправки
Чтобы понять новую структуру дизайна magento 2, я пытаюсь создать простой модуль отправки формы интерфейса. В нем я отправляю число в поле ввода и хочу умножить его на 2 и отобразить результат на другой странице. Каков правильный архитектурный поток для его достижения? И, пожалуйста, укажите ссылку на аналогичный пример, если он доступен.
1 answers
Вы начинаете с определения маршрута для вашего модуля. Это делается в <module_directory>/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 id="timestwo" frontName="timestwo">
<module name="Your_Module"/>
</route>
</router>
</config>
Затем создайте контроллер "Индекс" для этого маршрута под <module_directory>/Controller/Index.php
<?php
namespace Your\Module\Controller;
use Magento\Framework\App\Action\Action;
use Magento\Framework\App\Action\Context;
use Magento\Framework\View\Result\PageFactory;
class Index extends Action
{
protected $resultPageFactory;
public function __construct(Context $context, PageFactory $pageFactory)
{
$this->resultPageFactory = $pageFactory;
parent::__construct($context);
}
public function execute()
{
$resultPage = $this->resultPageFactory->create();
return $resultPage;
}
}
Создайте файл макета для этой страницы в разделе <module_directory>/view/frontend/layout/timestwo_index.xml
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column"
xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<head>
<title>Form</title>
</head>
<body>
<referenceContainer name="content">
<block name="form" class="Magento\Framework\View\Element\Template" template="Your_Module::form.phtml"/>
</referenceContainer>
</body>
</page>
Теперь создайте шаблон <module_directory>/view/frontend/templates/form.phtml
<form class="form" action="result" method="post">
<fieldset class="fieldset">
<legend class="legend"><span><?php /* @escapeNotVerified */ echo __('Test Form') ?></span></legend><br>
<div class="field required">
<label for="number" class="label">
<span><?php /* @escapeNotVerified */ echo __('Input') ?></span>
</label>
<div class="control">
<input type="text" id="number"
name="number"
class="input-text">
</div>
</div>
</fieldset>
<div class="actions-toolbar">
<div class="primary">
<button type="submit" class="action submit primary" title="<?php /* @escapeNotVerified */ echo __('Submit') ?>">
<span><?php /* @escapeNotVerified */ echo __('Submit') ?></span>
</button>
</div>
</div>
</form>
Теперь сделайте контроллер для страницы результатов: <module_directory>/Controller/Result.php
<?php
namespace Your\Module\Controller;
use Magento\Framework\App\Action\Action;
use Magento\Framework\App\Action\Context;
use Magento\Framework\View\Element\Messages;
use Magento\Framework\View\Result\PageFactory;
class Result extends Action
{
/** @var PageFactory $resultPageFactory */
protected $resultPageFactory;
/**
* Result constructor.
* @param Context $context
* @param PageFactory $pageFactory
*/
public function __construct(Context $context, PageFactory $pageFactory)
{
$this->resultPageFactory = $pageFactory;
parent::__construct($context);
}
/**
* The controller action
*
* @return \Magento\Framework\View\Result\Page
*/
public function execute()
{
$number = $this->getRequest()->getParam('number');
$resultPage = $this->resultPageFactory->create();
/** @var Messages $messageBlock */
$messageBlock = $resultPage->getLayout()->createBlock(
'Magento\Framework\View\Element\Messages',
'answer'
);
if (is_numeric($number)) {
$messageBlock->addSuccess($number . ' times 2 is ' . ($number * 2));
}else{
$messageBlock->addError('You didn\'t enter a number!');
}
$resultPage->getLayout()->setChild(
'content',
$messageBlock->getNameInLayout(),
'answer_alias'
);
return $resultPage;
}
}
Наконец, создайте XML-файл макета для страницы результатов в <module_directory>/view/frontend/layout/timestwo_result.xml
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column"
xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<head>
<title>Result</title>
</head>
</page>
Запустите php bin/magento setup:upgrade
, чтобы включить свой модуль, если вы еще не уже.
Теперь очистите кэш.
Перейдите к <magento_location>/timestwo
в браузере, чтобы просмотреть форму.