Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [symfony] routing? gdy moduł nie istnieje...
Forum PHP.pl > Forum > PHP
adalgrim
Witam,

Może mi ktoś powiedzieć w jaki sposób odsyłać zawsze na stronę główną strony, jeżeli nie istnieje wpisywany adres?
Po zainstalowaniu symfony i wpisaniu jakiegoś dziwnego adresu pokazuje błąd 404, którego nie chcę w swojej aplikacji smile.gif

Routing jest domyślny tj.:

default_index:
url: /:module
param: { action: index }

default:
url: /:module/:action/*


I teraz dajmy na to tworzymy moduł news, który zostanie złapany przez default_index, a jeżeli ktoś się pomyli i wpisze "new" to jak odesłać na stronę główną bez strony 404?

Czy jest inna opcja niż pisanie dla każdego modułu osobnego routingu?

Z góry dziękuję za pomoc.
-=Peter=-
Tworzysz akcję error404 w module np. default, ustawiasz go w settings.yml jako akcja do obsługi błędu 404, a w tej akcji przekierowujesz lub forwardujesz do strony głównej.

Inny sposób to regułka (na samym dole pliku routing.yml):

url: /*

Aczkolwiek wg mnie przy literówce użytkownik powinien być przekierowany na stronę błędu, w której zawrzesz np. informację o tym, czy oby na pewno adres jest poprawny. Jeśli użytkownik zostanie przekierowany na stronę główną, a spodziewał się czegoś innego, to zwyczajnie pomyśli "wtf" - ale to już kwestia użyteczności.
adalgrim
@Peter Twoja reguła nie zadziała, bo wcześniej dopasowana jest reguła default_index. Właśnie też nad tym myślałem w ten sposób, ale nie chciało złapać.

Kwestia sporna czy wyświetlać błąd czy odsyłać na stronę główną. Zależy co komu potrzebne. Natomiast 404 to też nie to o czym myślę smile.gif
eamzeet
Ale 404 będzie chyba najlepszym rozwiązaniem. Są jakieś przeciwwskazania przed zastosowaniem tego u Ciebie ?
adalgrim
A moglibyście pokazać o co chodzi z tym settingsem? bo nie bardzo rozumiem.

Ogólnie na razie zrobiłem to tak, że mam moduł default, który wczytuje szablon. W module tym mam klasę z metodą executeError404. Dodatkowa klasa dziedziczy po sfActions i wykorzystuje nadpisanie metod forward404*

Suma sumarum mam stronę taką jak normalna tylko zamiast treści mam komunikat błędu (jeśli przekazany) lub informację o 404. Wydaje mi się, że gdybym chciał teraz tylko przekierować na główną to wystarczyłby redirect w tej metodzie executeError404. To po co settings.yml ? smile.gif
eamzeet
No tak tylko, że ten moduł: default jest w bebechach symfony i tam musisz to robić.
A możesz sobie ustawić dowolny swój moduł i dowolną swoją akcję przechwytującą wyjątek 404 w pliku settings.yml dając:

error_404_module: myModule
error_404_action: myAction


i tutaj sobie ustawiasz.
No ale ogólnie to wystarczy dać redirect tak jak mówisz w metodzie która przechwytuje wyjątek 404.
destroyerr
@adalgrim tylko po co robić redirect skoro możesz pokazać 404. Jeśli jednak chcesz główną no to w Twojej akcji obsługującej 404 i daj sobie redirect albo forward. Nie ma co kombinować.

@eamzeet To prawda że ten moduł jest w symfony, ale nie ma problemu żeby nadpisać to w swojej aplikacji.
adalgrim
Tak jak napisał destroyerr, ja moduł default nadpisuje w swojej aplikacji i nie ma z tym żadnych problemów.

Czy błąd 404 czy redirect to według mnie kwestia założenia. Nie ma co się kłócić co jest lepsze smile.gif

@eamzeet dzięki za wytłumaczenie settingsa
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.