Rediriger après l'envoi du formulaire


15

Je crée un formulaire personnalisé dans Drupal 8, je me souviens que nous pouvons rediriger vers un chemin personnalisé dans Drupal 7 avec $form_state['redirect'] = 'mycustompath';un gestionnaire de soumission personnalisé, mais comment rediriger l'utilisateur après la soumission d'un formulaire dans Drupal 8?

Je sais que je devrais utiliser la submitFormméthode:

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

Réponses:


30

Dans votre méthode "submitForm", écrivez le code ci-dessous

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

machine_nameest le nom de la machine mentionné dans le fichier de routage.

J'espère que ça aide .. :)


ne fonctionne pas. J'essaie mon itinéraire personnalisé $form_state->setRedirect('/start');return;, supposons que je souhaite rediriger vers la page d'accueil. qu'est-ce qu'un extrait exact?
Yusef

1
$ form_state-> setRedirect ('<front>'); revenir;
parth.k

ce ne devrait pas être '/ start'. Il s'agit de l'alias mentionné dans le fichier de routage.
parth.k

'<front>'travaillé ce que vous sur l'alias de chemin? c'est ma routetcdev.content: path: '/start' defaults: _controller: 'Drupal\tcdev\Controller\TrainingCenterController::content' _title: 'Start Training Center' requirements: _permission: 'access content'
Yusef

Ce devrait être $ form_state-> setRedirect ('tcdev.content');
parth.k

8

Si vous souhaitez définir à buildform, vous devez utiliser un chemin de routage comme.

use Drupal\Core\Url;

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

qu'est-ce que l'espace de noms d'Url? Url' not found
Yusef

devrait être use Drupal\Core\Url;(sans la barre oblique précédente)
ummdorian

$form_state->setRedirectUrl($url);peut également être utilisé dans submitForm ().
Shaun Dychko

Vérifiez l'API: api.drupal.org/api/drupal/… . setRedirect () convertit simplement l'itinéraire en URL d'abord, puis appelle setRedirectUrl ().
imclean

0

Si vous souhaitez rediriger le formulaire de modification de l'utilisateur vers la page d'accueil ou une autre page, suivez le code ci-dessous.

Tout d'abord, ajoutez-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';
  } 
}

après l'ajout du crochet, ajoutez la fonction ci-dessous

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;
}

J'espère que cette aide.


Cela ne contourne-t-il pas tous les gestionnaires de soumission qui devraient se déclencher après votre gestionnaire?
joekers

Vous devez avoir uniquement $form_state->setRedirect()dans le formulaire d'envoi afin que tous les autres gestionnaires d'envoi puissent être traités.
joekers
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.