Помогите, плз, новичку.
Создал модуль [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
Ответы
return $this->redirect(
'birki.hellopage',
['param1' => $param1],
);
Ответ дан 05.04.2018 - 18:16
if (isset($_POST['search'])) {
return $this->redirect('birki.hellopage', ['param1' => $_POST['search']]);
}
Ответ дан 05.04.2018 - 18:18
Спасибо! Это подошло!
Комментарий оставлен 06.04.2018 - 08:38
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 попахивает битриксом
юзер даже не знает как работать с формами, что тут ещё советовать)
Как минимум нужно было объяснить, что у него изначально все неправильно и дать ссылки на правильную реализацию. В итоге у него костыль подпирается другим костылем.
модуль с формой я могу сделать. Но как эту форму , например в таблицу вставить? Типа вводим поле поиска (оно в шапке таблицы) , а результаты поиска уже выводятся в таблицу.
Может это и дебильный вопрос, но не смейтесь, я только начал разбираться с drupal 8.
Вот пример для 7-ки, но в 8-ке подход почти такой же: http://e9p.net/theming-drupal-7-form-elements-table
Суть в том, что у тебя изначально неправильно выведена форма. Вот тут посмотри, как правильно сделать: https://www.drupal.org/docs/8/api/form-api/introduction-to-form-api
В drupal 8 форму темизировать ещё проще будет - там есть шаблоны для всей формы и отдельных элементов. Обернуть в строки и ячейки я думаю не составит труда. Главное не изобретать свой велосипед.