J'ai un module personnalisé qui affiche un formulaire.
En soumettant le formulaire, je souhaite rediriger l'utilisateur vers une autre page.
Comment puis je faire ça?
Dans le gestionnaire de soumission, vous faites
Drupal 7:
$form_state['redirect'] = 'url';
Drupal 8:
$form_state->setRedirect('route', $args, $options);
$form_state->setRedirectUrl(\Drupal\Core\Url);
/my-form?destination=node/123
.Il convient de noter qu'il existe plusieurs déclencheurs qui peuvent empêcher une redirection:
$form_state['redirect'] === FALSE
: S'il est défini, la fonction de création de formulaire ou le gestionnaire de validation / soumission de formulaire ne souhaite pas qu'un utilisateur soit redirigé, ce qui signifie qu'ildrupal_goto()
n'est pas appelé. Pour la plupart des formulaires, la logique de redirection sera la même, qu'elle$form_state['redirect']
soit indéfinie ou FAUX. Cependant, si elle n'a pas été définie et que la demande actuelle contient une chaîne de requête «destination», elledrupal_goto()
sera redirigée vers cette destination donnée à la place. Seul le réglage$form_state['redirect']
surFALSE
empêchera toute redirection.$form_state['no_redirect'] === TRUE
: Une fois défini, le rappel qui a initialement créé le formulaire interdit explicitement toute redirection, quelle que soit la valeur de redirection dans$form_state['redirect']
. Par exemple,ajax_get_form()
définit$form_state['no_redirect']
lors de la création d'un formulaire dans un rappel AJAX pour empêcher toute redirection.$form_state['no_redirect']
ne doit PAS être modifié par les fonctions de création de formulaire ou les gestionnaires de validation / soumission de formulaire.$form_state['programmed'] === TRUE
: signifie que la soumission du formulaire était généralement invoquée viadrupal_form_submit()
, donc toute redirection romprait le script invoquédrupal_form_submit()
.$form_state['rebuild'] === TRUE
: signifie que le formulaire doit être reconstruit sans redirection.la source
Pour Drupal 7, j'ai essayé cela sur un module personnalisé et cela fonctionne. Il peut également être utilisé dans un thème:
BTW, j'ai trouvé cet extrait ici: https://gist.github.com/postrational/5768796
la source
Pour rediriger vers une URL externe dans Drupal 8, utilisez la
TrustedRedirectResponse
classe, comme dans le code suivant.la source
use
mot - clé et son espace de noms:use Drupal\Core\Routing\TrustedRedirectResponse;
Le D8, j'ai aimé ça (mais cela ne fonctionnera pas ... voir ci-dessous):
Modifier/
Il me manquait que setRedirect / setRedirectUrl fonctionne APRÈS la soumission du module, c'est donc ma solution de travail sur D8:
J'espère que cela pourrait aider
la source
Pour drupal 7 si vous souhaitez rediriger vers l'URL avec des paramètres comme
someurl?param1=1¶m2=2
la source