#php #magento2
#php #magento2
Вопрос:
У меня проблема с пользовательской формой, которая должна отправлять запрос post на пользовательский контроллер, он перенаправляет меня на страницу поиска, и я понятия не имею, почему. Когда я пытаюсь вставить URL-адрес действия в браузер, он работает корректно.
моя форма phtml:
<form class="quick-order-list"
method="post"
action="<?php echo $block->getFormAction(); ?>"
name="listsform"
enctype='multipart/form-data'>
<?= $block->getChildHtml('quick_order_multipleskus') ?>
<?= $block->getChildHtml('quick_order_file') ?>
<div class="quick-order-list-button">
<div class="secondary">
<button type="submit"
name="lists"
title="<?= __('Add to List') ?>"
class="action submit primary">
<span><?= __('Add to List') ?></span>
</button>
</div>
</div>
получить метод действия:
public function getFormAction()
{
return $this->getUrl('quickorder/lists/index', ['_secure' => true]);
}
контроллер находится в vendormoduleControllerListsIndex.php файл
<?php
declare(strict_types=1);
namespace modulevendorControllerLists;
use MagentoFrameworkAppActionHttpGetActionInterface;
use MagentoFrameworkControllerResultForward;
use MagentoFrameworkControllerResultForwardFactory;
class Index implements HttpGetActionInterface
{
private $forwardFactory;
public function __construct(
ForwardFactory $forwardFactory
) {
$this->forwardFactory = $forwardFactory;
}
public function execute()
{
die('ello');
}
}
в html для меня это выглядит нормально:
<form class="quick-order-list" method="post" action="http://pleasehelp.local/quickorder/lists/index/" name="listsform" enctype="multipart/form-data">
после нажатия кнопки отправки я приземляюсь на:
/catalogsearch/result/?q=быстрый порядок списки индекс
Magento 2.4.0, php7.3
Оно даже не попадает в функцию выполнения, но я могу поймать его в конструкторе, когда я помещаю туда die(), он работает. Пробовал многие мысли, удаляя поля из формы, пытаясь указать на другие контроллеры, помещая туда статический URL-адрес действия,
для получения он работает корректно…
Я начал подозревать, что это не имеет никакого отношения к моему коду, но что-то сломано в проекте, но не знаю, как это проверить, может кто-нибудь указать мне правильное направление?
Ответ №1:
Вы должны реализовать MagentoFrameworkAppActionHttpPostActionInterface
вместо HttpGetActionInterface внутри вашего класса контроллера
Комментарии:
1. Да, это решило мою проблему, и я думаю, что это новое в 2.4.
2. Нет, оно действительно существовало с 2.3 для предотвращения атак CSRF