Tengo un módulo personalizado que muestra un formulario.
Al enviar el formulario, quiero redirigir al usuario a una página diferente.
¿Cómo puedo hacer eso?
En el controlador de envío que haces
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
.Cabe señalar que hay varios factores desencadenantes que pueden evitar una redirección:
$form_state['redirect'] === FALSE
: Si se establece, la función de creación de formularios o el controlador de validación / envío de formularios no desea que se redirija a un usuario, lo que significa quedrupal_goto()
no se invoca. Para la mayoría de las formas, la lógica de redireccionamiento será la misma independientemente de si$form_state['redirect']
es indefinida o FALSA. Sin embargo, en caso de que no se haya definido y la solicitud actual contenga una cadena de consulta de "destino",drupal_goto()
se redirigirá a ese destino dado. Solo establecer$form_state['redirect']
enFALSE
evitará cualquier redirección.$form_state['no_redirect'] === TRUE
: Cuando se establece, la devolución de llamada que originalmente creó el formulario no permite explícitamente ninguna redirección, independientemente del valor de redirección en$form_state['redirect']
. Por ejemplo,ajax_get_form()
define$form_state['no_redirect']
cuándo compilar un formulario en una devolución de llamada AJAX para evitar cualquier redirección.$form_state['no_redirect']
NO debe ser alterado por las funciones del generador de formularios o los controladores de validación / envío de formularios.$form_state['programmed'] === TRUE
: significa que el envío del formulario generalmente se invocó a través dedrupal_form_submit()
, por lo que cualquier redirección rompería el script que invocódrupal_form_submit()
.$form_state['rebuild'] === TRUE
: significa que el formulario debe reconstruirse sin redireccionamiento.fuente
Para Drupal 7, probé esto en un módulo personalizado y funciona. También se puede usar en un tema:
Por cierto, encontré este fragmento aquí: https://gist.github.com/postrational/5768796
fuente
Para redirigir a una URL externa en Drupal 8, use la
TrustedRedirectResponse
clase, como en el siguiente código.fuente
use
palabra clave y su espacio de nombres:use Drupal\Core\Routing\TrustedRedirectResponse;
En D8 me gustó esto (pero esto no funcionará ... ver más abajo):
Editar/
Me faltaba que setRedirect / setRedirectUrl funciona DESPUÉS de que se envíe el módulo, por lo que esta es mi solución de trabajo en D8:
Espero que esto pueda ayudar
fuente
Para drupal 7 si desea redirigir a url con parámetros como
someurl?param1=1¶m2=2
fuente