Перенаправление после отправки формы


Я использую этот код в своей форме (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'
 2
Author: RobinSon, 2017-03-26

3 answers

Метод buildForm должен возвращать $form. Не $test. Вы пропускаете ключевые элементы, игнорируя переменную $form. Правильно установите элементы формы (не как их собственную переменную) и удалите пользовательский хук темы, который вы пытаетесь сделать. Сначала сократите это до самых простых частей, просто чтобы заставить его работать и двигаться дальше.

Избавьтесь от переменных $a $b $c, так как это не имеет никакого смысла, просто используйте $form. Ваша отправленная информация не попадает в саму форму, поэтому она не работает.

 4
Author: Kevin, 2017-03-27 14:49:47

Вы можете настроить перенаправление в действии формы,

// Get the routename
$routename = 'test.new';
  $url = \Drupal\Core\Url::fromRoute($routename);
  // make the redirection
  $form['#action'] = $url->toString();
 1
Author: Safallia Milins, 2017-03-27 04:58:53

Я думаю, это может быть потому, что вы убиваете кэш этим:

\Drupal::service('page_cache_kill_switch')->trigger();

Удалите это и посмотрите, работает ли ваш редирект.

 0
Author: Jaypan, 2017-03-26 16:27:49