Перенаправление после отправки формы
Я использую этот код в своей форме (buildForm (массив $форма, FormStateИнтерфейс $form_state)):
<?php
namespace Drupal\test\Form;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\user\PrivateTempStoreFactory;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Session\SessionManager;
use Symfony\Component\HttpFoundation\Response;
class TestForm extends FormBase {
public function getFormId() {
return 'TESTOLDTONEW';
}
public function buildForm(array $form, FormStateInterface $form_state) {
\Drupal::service('page_cache_kill_switch')->trigger();
$a['ad_mail'] = [
'#type' => 'email',
'#title' => t('Email ID:'),
'#required' => TRUE,
];
$b['total'] = [
'#type' => 'hidden',
'#attributes' => [
'id' => 'actionsubmitid',
],
'#value' => '0',
];
$c['actions']['submit'] = [
'#type' => 'submit',
'#value' => $this->t('Finalize the purchase'),
'#button_type' => 'primary',
];
$test= [
'#theme' => 'test',
'#a' => $a,
'#b' => $b,
'#c' => $c,
];
return $test;
}
public function validateForm(array &$form, FormStateInterface $form_state) {
}
public function submitForm(array &$form, FormStateInterface $form_state) {
$form_state->setRedirect('test.new');
}
}
Теперь я хочу перенаправить на имя машины (например, "test.new"), которое создается в маршрутизации.файл yml. Я использую $form_state->setRedirect('test.new');
в "Форме отправки (массив и $форма, FormStateИнтерфейс $form_state)", но не работаю.
ОТРЕДАКТИРОВАНО:
.маршрутизация.yml
test.old:
path: '/test/old'
defaults:
_form: '\Drupal\bpay\Form\TestoldForm'
requirements:
_permission: 'access content'
test.new:
path: '/test/new'
defaults:
_controller: '\Drupal\bpay\Controller\TestnewController::new'
requirements:
_permission: 'access content'
3 answers
Метод buildForm
должен возвращать $form
. Не $test
. Вы пропускаете ключевые элементы, игнорируя переменную $form
. Правильно установите элементы формы (не как их собственную переменную) и удалите пользовательский хук темы, который вы пытаетесь сделать. Сначала сократите это до самых простых частей, просто чтобы заставить его работать и двигаться дальше.
Избавьтесь от переменных $a $b $c
, так как это не имеет никакого смысла, просто используйте $form
. Ваша отправленная информация не попадает в саму форму, поэтому она не работает.
Вы можете настроить перенаправление в действии формы,
// Get the routename $routename = 'test.new'; $url = \Drupal\Core\Url::fromRoute($routename); // make the redirection $form['#action'] = $url->toString();
Я думаю, это может быть потому, что вы убиваете кэш этим:
\Drupal::service('page_cache_kill_switch')->trigger();
Удалите это и посмотрите, работает ли ваш редирект.