Reindirizzamento dopo l'invio del modulo


15

Creo un modulo personalizzato in Drupal 8, ricordo che possiamo reindirizzare al percorso personalizzato in Drupal 7 con impostato $form_state['redirect'] = 'mycustompath';nel gestore di invio personalizzato, ma come reindirizzare l'utente dopo l'invio del modulo in Drupal 8?

So che dovrei usare il submitFormmetodo:

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

Risposte:


30

Nel tuo metodo "submitForm" scrivi sotto il codice

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

dove si machine_nametrova il nome della macchina menzionato nel file di routing.

Spero che questo possa essere d'aiuto .. :)


non funziona. Provo il mio percorso personalizzato $form_state->setRedirect('/start');return;, supponiamo di voler reindirizzare alla home page. che cos'è lo snippet esatto?
Yusef,

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

non dovrebbe essere "/ start". È l'alias menzionato nel file di routing.
parth.k,

'<front>'ha funzionato di cosa si tratta alias percorso? questo è il mio percorsotcdev.content: path: '/start' defaults: _controller: 'Drupal\tcdev\Controller\TrainingCenterController::content' _title: 'Start Training Center' requirements: _permission: 'access content'
Yusef,

Dovrebbe essere $ form_state-> setRedirect ('tcdev.content');
parth.k,

8

Se si desidera impostare su buildform è necessario utilizzare alcuni percorsi di routing come.

use Drupal\Core\Url;

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

cos'è lo spazio dei nomi di Url? Url' not found
Yusef,

dovrebbe essere use Drupal\Core\Url;(senza la precedente barra)
ummdorian,

$form_state->setRedirectUrl($url);può essere utilizzato anche in submitForm ().
Shaun Dychko,

Controlla l'API: api.drupal.org/api/drupal/… . setRedirect () converte prima il percorso in un URL, quindi chiama setRedirectUrl ().
imclean

0

Se si desidera reindirizzare il modulo di modifica utente alla home page o altra pagina, seguire il codice seguente.

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

dopo aver aggiunto il gancio, aggiungere la seguente funzione

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

Spero questo aiuto.


Questo non esclude tutti i gestori di invio che dovrebbero essere attivati ​​dopo il tuo gestore?
joekers,

È necessario disporre solo $form_state->setRedirect()del modulo di invio in modo che tutti gli altri gestori di invio possano essere elaborati.
joekers,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.