Weiterleiten nach dem Absenden des Formulars


16

Ich erstelle ein benutzerdefiniertes Formular in Drupal 8. Ich erinnere mich, dass wir in Drupal 7 mit dem $form_state['redirect'] = 'mycustompath';benutzerdefinierten Submit-Handler zum benutzerdefinierten Pfad umleiten können , aber wie kann ich Benutzer nach dem Senden des Formulars in Drupal 8 umleiten?

Ich weiß, ich sollte submitFormMethode verwenden:

public function submitForm(array &$form, FormStateInterface $form_state)
{
   //submissions jobs ...
   //redirect path
}

Antworten:


30

Schreiben Sie in Ihrer "submitForm" -Methode den folgenden Code

 $form_state->setRedirect('machine_name');
 return;

Wo machine_nameist der in der Routing-Datei angegebene Maschinenname?

Ich hoffe das hilft .. :)


nicht arbeiten. Ich versuche meine benutzerdefinierte Route $form_state->setRedirect('/start');return;. Nehmen wir an, ich möchte zur Startseite umleiten. Was ist ein genaues Snippet?
Yusef

1
$ form_state-> setRedirect ('<front>'); Rückkehr;
Teil.k

es sollte nicht '/ start' sein. Dies ist der in der Routing-Datei erwähnte Alias.
Teil.k

'<front>'hat was du über path alias gemacht? Dies ist meine Routetcdev.content: path: '/start' defaults: _controller: 'Drupal\tcdev\Controller\TrainingCenterController::content' _title: 'Start Training Center' requirements: _permission: 'access content'
Yusef

Es sollte $ form_state-> setRedirect ('tcdev.content') sein;
Teil.k

8

Wenn Sie bei buildform festlegen möchten, müssen Sie einen Routing-Pfad wie verwenden.

use Drupal\Core\Url;

$url = Url::fromRoute('route.path');
$form_state->setRedirectUrl($url);

Was ist der Namespace von Url? Url' not found
Yusef

sollte sein use Drupal\Core\Url;(ohne den vorhergehenden Schrägstrich)
ummdorian

$form_state->setRedirectUrl($url);kann auch in submitForm () verwendet werden.
Shaun Dychko

Überprüfen Sie die API: api.drupal.org/api/drupal/… . setRedirect () konvertiert nur die Route in eine URL und ruft dann setRedirectUrl () auf.
imclean

0

Wenn Sie das Benutzerbearbeitungsformular zur Startseite oder einer anderen Seite umleiten möchten, folgen Sie dem folgenden Code.

Zuerst add-hook - hook_form_alter`

function yourmodulename_form_alter(&$form, FormStateInterface $form_state, $form_id) 
{
    if ($form_id === 'your form id') {
    $form['actions']['submit']['#submit'][] = 'modulename_user_edit_form_submit';
  } 
}

Fügen Sie nach dem Hinzufügen des Hakens die folgende Funktion hinzu

function modulename_user_edit_form_submit($form,  FormStateInterface &$form_state) {
  global $base_url; //set base path
  $response = new Symfony\Component\HttpFoundation\RedirectResponse($base_url ."/xyz"); //set url
  $response->send();
  return;
}

Ich hoffe diese Hilfe.


Umgeht dies nicht alle Submit-Handler, die nach Ihrem Handler ausgelöst werden sollen?
Joekers

Sie sollten nur $form_state->setRedirect()im Formular Submit angeben, damit alle anderen Submit-Handler verarbeitet werden können.
Joekers
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.