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
}

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 .. :)


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

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.