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?

David Mcsmith
źródło
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)

Yusef
źródło
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]);
rem
źródło
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.

Parag
źródło
2

Prosty przykład: zadziała :)

use Drupal\Core\Url;
$form_state->setRedirect('view.VIEW_MACHINE_NAME.PAGE_MACHINENAME'); // view.my_view.page_1
kalidasan
źródło
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'); 
Olli Bolli
źródło