Сообщение пользовательской формы Magento 2.4 перенаправляет 404 или поиск

#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