Przekieruj po przesłaniu formularza

15

Tworzę niestandardowy formularz w Drupal 8, pamiętam, że możemy przekierować na niestandardową ścieżkę w Drupal 7 za pomocą zestawu $form_state['redirect'] = 'mycustompath';w niestandardowym module obsługi przesyłania, ale w jaki sposób można przekierować użytkownika po przesłaniu formularza w Drupal 8?

Wiem, że powinienem użyć submitFormmetody:

public function submitForm(array &$form, FormStateInterface $form_state)
{
   //submissions jobs ...
   //redirect path
}
Yusef
źródło

Odpowiedzi:

30

W metodzie „SubmitForm” wpisz poniższy kod

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

gdzie machine_namejest nazwa komputera wymieniona w pliku routingu.

Mam nadzieję, że to pomoże .. :)

parth.k
źródło
nie działa. Próbuję niestandardowej trasy $form_state->setRedirect('/start');return;, załóżmy, że chcę przekierować na stronę główną. jaki jest dokładny fragment?
Yusef
1
$ form_state-> setRedirect ('<front>'); powrót;
parth.k
nie powinno być „/ start”. Jest to alias wymieniony w pliku routingu.
parth.k
'<front>'pracowałeś co na temat aliasu ścieżki? to moja trasatcdev.content: path: '/start' defaults: _controller: 'Drupal\tcdev\Controller\TrainingCenterController::content' _title: 'Start Training Center' requirements: _permission: 'access content'
Yusef
Powinno to być $ form_state-> setRedirect ('tcdev.content');
parth.k
8

Jeśli chcesz ustawić na buildform, musisz użyć ścieżki routingu, takiej jak.

use Drupal\Core\Url;

$url = Url::fromRoute('route.path');
$form_state->setRedirectUrl($url);
Vgoradiya
źródło
jaka jest przestrzeń nazw adresu URL? Url' not found
Yusef
powinno być use Drupal\Core\Url;(bez poprzedniego ukośnika)
ummdorian
$form_state->setRedirectUrl($url);może być również użyty w submForm ().
Shaun Dychko
Sprawdź API: api.drupal.org/api/drupal/... . setRedirect () najpierw konwertuje trasę na adres URL, a następnie wywołuje setRedirectUrl ().
imclean
0

Jeśli chcesz przekierować formularz edycji użytkownika na stronę główną lub inną stronę, postępuj zgodnie z poniższym kodem.

Najpierw dodaj 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';
  } 
}

po dodaniu haka dodaj funkcję poniżej

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

Mam nadzieję, że ta pomoc.

prashant
źródło
Czy to nie pomija wszystkich programów obsługi, które powinny wystrzelić po twoim programie obsługi?
joekers
Powinieneś mieć tylko $form_state->setRedirect()w formularzu prześlij, aby wszystkie pozostałe procedury obsługi przesyłania mogły być przetwarzane.
joekers