Symfony - tworzenie bardziej elastycznych przekierowań

Stronę tą wyświetlono już: 40 razy

Na poprzedniej stronie pokazałem jak utworzyć przekierowania, problem jednak jest w tym, że jak na rasowego programistę przystało, jestem trochę leniwy i nie chce mnie się tworzyć nowy kontroler za każdym razem, gdy tylko przyjdzie mi ochota stworzyć podstronę np. do działu second. Ach, gdyby istniał jakiś sprytny (żeby nie powiedzieć przebiegły) sposób na rozwiązanie tego zagadnienia! Na szczęście taki sprytny (żeby nie powiedzieć przebiegły) sposób istnieje, albowiem za prawdę powiadam wam, że można zamiast starego kodu użyć następującego, bardziej elastycznego:

Listing 1
  1. /**
  2. * @Route("/second/{page}")
  3. */
  4. public function secondPageAction($page)
  5. {
  6. return new Response(
  7. "<html><body>My second Symfony " . $page . " ever!</body></html>"
  8. );
  9. }

Uuuu! Co my tutaj mamy? Jakieś {page} pojawiło się w Route ale to nie wszystko! Wygląda na to, że metoda odpowiedzialna za obsługę tego przekierowania również przyjmuje parametr $page. Żeby tego było jeszcze mało parametr $page użyty został w kodzie strony! Więc nie zwlekając już ani sekundy dłużej przejdźmy do przeglądarki i czym prędzej wpiszmy np.: localhost:8000/second/page, a później tak dla zaspokojenia własnej próżnej ciekawości: localhost:8000/second/stuff

Co tu się dzieje? Wygląda na to, że Boże Narodzenie przyszło wcześnie w tym roku! Dla pierwszego adresu przeglądarka wyświetla: My second Symfony page ever!, a dla drugiego: My second Symfony stuff ever!

Ale czekaj! To nie wszystko! Pobawmy się tym jeszcze trochę! Zobaczmy co się stanie, jak zrobię to:

Listing 2
  1. /**
  2. * @Route("/{title}/{page}")
  3. */
  4. public function pagesAction($title, $page)
  5. {
  6. return new Response(
  7. "<html><body>" . $title . " " . $page . "</body></html>"
  8. );
  9. }

Co tu się wyprawia do diaska!? Teraz mogę sobie wpisać cokolwiek, np. localhost:8000/page/page i będzie działało! Będą też działały wcześniej wstawione przekierowania ale tylko dlatego, że zostały one utworzone powyżej metody pageAction.

Komentarze