Redireccionar después del envío del formulario


15

Creo un formulario personalizado en Drupal 8, recuerdo que podemos redirigir a una ruta personalizada en Drupal 7 con el $form_state['redirect'] = 'mycustompath';controlador de envío personalizado, pero ¿cómo puedo redirigir al usuario después del envío del formulario en Drupal 8?

Sé que debería usar el submitFormmétodo:

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

Respuestas:


30

En su método "submitForm" escriba el siguiente código

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

donde machine_namese menciona el nombre de la máquina en el archivo de enrutamiento.

Espero que esto ayude .. :)


no trabajo. Intento mi ruta personalizada $form_state->setRedirect('/start');return;, supongamos que quiero redirigir a la página de inicio. ¿Qué es el fragmento exacto?
Yusef

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

no debería ser '/ start'. Es el alias mencionado en el archivo de enrutamiento.
fiesta

'<front>'¿trabajaste sobre alias de ruta? esta es mi rutatcdev.content: path: '/start' defaults: _controller: 'Drupal\tcdev\Controller\TrainingCenterController::content' _title: 'Start Training Center' requirements: _permission: 'access content'
Yusef

Debería ser $ form_state-> setRedirect ('tcdev.content');
parth.k

8

Si desea establecer en buildform necesita usar alguna ruta de enrutamiento como.

use Drupal\Core\Url;

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

¿Qué es el espacio de nombres de la URL? Url' not found
Yusef

debería ser use Drupal\Core\Url;(sin la barra diagonal anterior)
ummdorian

$form_state->setRedirectUrl($url);también se puede usar en submitForm ().
Shaun Dychko

Verifique la API: api.drupal.org/api/drupal/… . setRedirect () solo convierte la ruta a una URL primero y luego llama a setRedirectUrl ().
impecable

0

Si desea redirigir el formulario de edición del usuario a la página de inicio u otra página, siga el código a continuación.

Primero, 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';
  } 
}

después de agregar el gancho, agregue la siguiente función

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

Espero esta ayuda


¿Esto no omite todos los controladores de envío que deberían activarse después de su controlador?
joekers

Debería haber $form_state->setRedirect()enviado solo en el formulario para que todos los demás controladores de envío puedan procesarse.
joekers
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.