Вы здесь

Как сделать редирект после сабмита моей формы?

-1

Помогите, плз, новичку.
Создал модуль [birki]с параметром [param1], который выводит страницу с формой. Там вводится текстовое поле [search].
Если в URL ввести [http://drupal/birki/12345] В контроллере параметр [$param1] нормально передаётся (равен "12345"). Теперь ввожу в текстовое поле [search] формы значение ,например, "98765".
Вопрос: как сделать так чтобы поле обработки ввода формы был переход на URL= http://drupal/birki/98765
файл birki\birki.routing.yml:

birki.hellopage:
  path: '/birki/{param1}'
  defaults:
    _controller: '\Drupal\birki\Controller\birkiController::birki'
    param1: '00000'
  requirements:
    _permission: 'access content'

Файл birki\src\Controller\birkiController.php:

<?php
/**
 * @file
 * Contains \Drupal\birki\Controller\birkiController.
 */
namespace Drupal\birki\Controller;

use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\RedirectResponse;
class birkiController extends ControllerBase {

  /**
   * {@inheritdoc}
   */
    public function birki($param1) {
        if($_SERVER['REQUEST_METHOD'] == 'POST') {
            $search=$_POST['search'];
        }
        $message ="";
        $message = $message."<form action='/birki' method='post' >
            <input  name='search' value='".$search."' size='15' class='ms-list8-main' style='font-size: 10pt; '></input>
            <input type='submit' value='поиск'></input>
            </form>
        </form>";
        $message = $message."</br><H1>param1=".$param1."</H1>";
        $message = $message."</br><H1>search=".$search."</H1>";
        return array(
            '#markup' => t($message),
        );
    }
}
Версия Drupal: 
8.x
Категория: 
Form API
Вопрос задан 05.04.2018 - 16:31

1 - если на странице выводится форма, то нужен не контроллер, а _form - https://www.drupal.org/docs/8/api/form-api/introduction-to-form-api
2 - @xandeadx советует в Drupal 8 использовать суперглобальные массивы? $_POST['foo'] получаем через $request->request->get('foo') (DI в контроллере Symfony\Component\HttpFoundation\Request либо в процедурном коде \Drupal::request()->request->get('foo'))
3 - редирект для формы делается в submitForm() с помощью $form_state->setRedirect() https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Form%21Fo...
4 - название модуля birki попахивает битриксом

Комментарий оставлен 06.04.2018 - 00:25

@xandeadx советует в Drupal 8 использовать суперглобальные массивы?

юзер даже не знает как работать с формами, что тут ещё советовать)

Комментарий оставлен 06.04.2018 - 03:00

Как минимум нужно было объяснить, что у него изначально все неправильно и дать ссылки на правильную реализацию. В итоге у него костыль подпирается другим костылем.

Комментарий оставлен 06.04.2018 - 12:04

модуль с формой я могу сделать. Но как эту форму , например в таблицу вставить? Типа вводим поле поиска (оно в шапке таблицы) , а результаты поиска уже выводятся в таблицу.
Может это и дебильный вопрос, но не смейтесь, я только начал разбираться с drupal 8.

Комментарий оставлен 06.04.2018 - 12:31

В drupal 8 форму темизировать ещё проще будет - там есть шаблоны для всей формы и отдельных элементов. Обернуть в строки и ячейки я думаю не составит труда. Главное не изобретать свой велосипед.

Комментарий оставлен 06.04.2018 - 13:52

Ответы

-1

RedirectResponse

return $this->redirect(
    'birki.hellopage',
    ['param1' => $param1],
  );
Ответ дан 05.04.2018 - 18:16
-1
if (isset($_POST['search'])) {
  return $this->redirect('birki.hellopage', ['param1' => $_POST['search']]);
}
Ответ дан 05.04.2018 - 18:18
Аватар пользователя xandeadx
xandeadx
1511