Jak uzyskać nazwę trasy strony widoku?


16

W moim niestandardowym module obsługi przesyłania chcę przekierować do adresu URL strony widoku, załóżmy, że moja nazwa widoku to zespół, a jego ścieżka brzmi /admin/team: wiem, że powinienem użyć, $from_state->setRedirect('route');ale kiedy próbowałem $from_state->setRedirect('/admin/team');W obliczu błędu, jak mogę uzyskać nazwę trasy widoku?


Jest to również wymagane w przypadku statycznej konfiguracji menu YAML.
vijaycs85

1
Nie bezpośrednia odpowiedź, ale miałem to samo pytanie do linków do widoku niestandardowego w innym module niestandardowym, więc w menu pliku konfiguracyjnego: MODULE.links.menu.yml utwórz węzeł z opcją trasy, route_name: view.YOUR_CUSTOM_MODULE_CONTAINS_CUSTOM_CONTENT_TYPE.page_1jeśli page_1 jest nazwą trybu widoku strony.
Jean-Luc Barat

Odpowiedzi:


39

Prawidłowa nazwa routera dla widoku to view.VIEW_MACHINE_NAME.PAGE_MACHINENAME(innymi słowy "view.$view_id.$display_id"). spróbuj czegoś takiego

use \Drupal\Core\Url;

$url = Url::fromRoute('view.VIEW_MACHINE_NAME.PAGE_MACHINENAME');
$form_state->setRedirectUrl($url);

i dla twojej sprawy

$url = Url::fromRoute('view.team.page_1'); // page_1 is my guess as to your page name, please replace it with your page machine_name

Lean more: Jak sformułować nazwę trasy

po komentarzu @ 4k4 Możesz również przekierować formularz na niestandardowy router z adresem URL

po prostu potrzebuję użycia $form_state->setRedirectUrl($url)


Ta odpowiedź jest nieco zła, ponieważ otrzymujesz poprawną nazwę routera dla widoku, więc nie trzeba tworzyć obiektu URL z tej nazwy routera. Powinieneś być w stanie użyć nazwy routera bezpośrednio: $form_state->setRedirect('view.VIEW_MACHINE_NAME.PAGE_MACHINENAME');
kbrinner

5

Aby użyć filtrów kontekstowych widoków jako parametrów, użyj argumentu arg_X, np.

$url = Url::fromRoute('view.team.page_1', ['arg_0' => 1234]);

3

Webprofiler modułu devel pozwala zobaczyć trasę dowolnej strony.

Wyświetla również liczbę zapytań DB wykonanych na stronie, a także czas żądania oprócz wielu innych funkcji.

Jest dostępny dla Drupal 7 i 8.


2

Prosty przykład: zadziała :)

use Drupal\Core\Url;
$form_state->setRedirect('view.VIEW_MACHINE_NAME.PAGE_MACHINENAME'); // view.my_view.page_1

Nie musisz używać Drupal \ Core \ Url - używasz trasy poprawnie, więc klasa URL nie jest potrzebna.
kbrinner

1

W przypadku Durpal 8 możesz również zajrzeć do tabeli bazy danych „routera”, aby uzyskać parametry redirct.

Poszukaj odpowiedniej wartości w kolumnie „nazwa” i porównaj z kolumną ścieżki.

$from_state->setRedirect('YOUR_DB_VALUE_HERE'); 
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.