Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony2][Symfony] Routing, problem z nakładającymi się ścieżkami
Forum PHP.pl > Forum > PHP > Frameworki
Barton
Witam,

Jako początkujący w symfony mam pewien problem z routingiem. Mam sobie taki kontroler:

  1. class UslugiController extends Controller
  2. {
  3. /**
  4.   * @Route("/{kategoria}/{miasto}/{zaklad}/")
  5.   */
  6. public function pobierzAction($kategoria, $miasto, $zaklad)
  7. {
  8. ...
  9. }
  10. }


Przy okazji wygenerowałem sobie panel CRUD do innego modelu, w którym to jest akcja:

  1. /**
  2.  * Zlecenia controller.
  3.  *
  4.  * @Route("/admin/zlecenia")
  5.  */
  6. class ZleceniaController extends Controller
  7. {
  8.  
  9. /**
  10.   * Displays a form to create a new Zlecenia entity.
  11.   *
  12.   * @Route("/new", name="admin_zlecenia_new")
  13.   * @Method("GET")
  14.   * @Template()
  15.   */
  16. public function newAction()
  17. {
  18. $entity = new Zlecenia();
  19. $form = $this->createForm(new ZleceniaType(), $entity);
  20.  
  21. return array(
  22. 'entity' => $entity,
  23. 'form' => $form->createView(),
  24. );
  25. }
  26. }


I nie mam pojęcia dlaczego, po wpisaniuw pasek adresu końcówki /admin/zlecenia/new, uruchamia mi się akcja... pobierz z kontrolera Uslugi. W jaki sposób to dać do zrozumienia symfony którą akcje ma odpalać?

Routing.yml wygląda tak:

  1. moj_pakiet:
  2. resource: "@MojPakietBundle/Controller/"
  3. type: annotation
  4. prefix: /
ShadowD
Symfony niestety ale używa adnotacji:

#1
@Route("/{kategoria}/{miasto}/{zaklad}/")

#2
@Route("/admin/zlecenia")
@Route("/new", name="admin_zlecenia_new")

Te liniki mają znaczenie usuń je i cały routing ustawiaj w *.yml.
Barton
No dobrze ale czym w zasadzie różni się routing w formie adnotacji a czym w routing.yml? Rozumiem że w routing.yml można ustawić kolejność i tylko tym się to chyba różni. Wybrałem formę adnotacji gdyż wydawało mi się to czytelniejsze.

Myślałem że jak już na stałe wpisałem /admin/zlecenia/new to już nie będzie mi dopasowywało adresu do zmiennych typu {kategoria}. Mógłbym użyć wymagań (requirements) ale {kategoria} czy {miasto} to czyste litery tak samo jako słowo 'admin' więc to również nie wchodzi raczej w grę...
ShadowD
#1
@Route("/{kategoria}/{miasto}/{zaklad}/")

#2
@Route("/admin/zlecenia")
@Route("/new", name="admin_zlecenia_new")

#1 przykład:
/samoloty/lublin/szklarski
/admin/zlecenia/new
/pieski/kolorowe/sa

#2 przykład:
/admin/zlecenia/new


#2 pasuje do 1 jaki i do 2 więc znaczenie ma kolejność - sf nie wie że admin to nie kategoria...

Osobiście uważam że przy większych projektach adnotacje zaciemniają kod (chodzi o routing bo modele z zdno. są super użyteczne).
Barton
Ok, w takim razie przeniosę się jutro do routing.yml. wink.gif Dzięki.
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.