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
}
Yusef
la source

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 .. :)

parth.k
la source
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);
vgoradiya
la source
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.

prashant
la source
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