Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF]routing + funkcja url
Forum PHP.pl > Forum > PHP > Frameworki
klapaucius


Od razu zaznaczam, że dopiero uczę się ZF. Napotkałem na następujący problem. Mianowicie posiadam np. kontroler index, a w nim dwie akcje: akcja1 i akcja2. I do akcji akcja1 posiadam ustawiony następujący routing w pliku application.ini:

Kod
resources.router.routes.index_akcja1.route = "akcja1.html"
resources.router.routes.index_akcja1.defaults.controller = "index"
resources.router.routes.index_akcja1.defaults.action = "akcja1"


I teraz chcę w widoku akcji1 stworzyć link do akcji2 więc robię następujący url:

  1. $this->url(array('controller' => 'index', 'action' => 'akcja2'));


I otwierając ten widok standardowo za pomocą url: aplikacja/public/index/akcja1, wartosc tej funkcji jest poprawna. Natomiast wchodząc z adresu "routingowanego" aplikacja/public/akcja1.html, to owa funkcja url zwraca jako wartosc adres obecnege widoku (aplikacja/public/akcja1.html).

Dlaczego tak jest?
karolrynio
Dzieje się tak ponieważ helper url domyślnie używa obecnego routing.

Jeśli chcesz żeby działało tak jak chcesz musisz podać nazwę routingu.
  1. $this->url(array('controller' => 'index', 'action' => 'akcja2'), 'index_akcja1');


klapaucius
Czyli że jako drugi parametr funkcji url muszę podać nazwę routingu?? Zrobiłem tak własnie jak pokazales i niestety nic to nie zmienilo...
Czyli dalej funkcja ta zwraca mi adres "aplikacja/public/akcja1.html" sad.gif
@edit
Bo oczywiście jeśli ustawie odpowiednio drugi routing do akcja2 i podam jako ten drugi parametr nazwe tego drugiego routingu, to poprawnie mnie przekieruje.. ale ja jednak wlasnie chce zrobic to bez tworzenia tego drugiego routingu... Zeby funkcja url utworzyla link na bazie samego kontrolera + akcji
karolrynio
Ok, już rozumiem Twój problem.
Masz 2 rozwiązania: dla każdej akcji definiować nowy routing jeśli jest bardzo niestandardowy.
Ale jeśli chcesz ustawić sobie linki w formie: /{nazwa_akcji}.html
To możesz spróbować w application.ini:
Kod
resources.router.routes.index_akcja1.route = ":action.html"


Wtedy powinno chyba zadziałać:
  1. $this->url(array('controller' => 'index', 'action' => 'akcja2'), 'index_akcja1');
klapaucius
Cytat(karolrynio @ 7.01.2013, 19:27:54 ) *
Ok, już rozumiem Twój problem.
Masz 2 rozwiązania: dla każdej akcji definiować nowy routing jeśli jest bardzo niestandardowy.
Ale jeśli chcesz ustawić sobie linki w formie: /{nazwa_akcji}.html
To możesz spróbować w application.ini:
Kod
resources.router.routes.index_akcja1.route = ":action.html"


Wtedy powinno chyba zadziałać:
  1. $this->url(array('controller' => 'index', 'action' => 'akcja2'), 'index_akcja1');

Niestety nic to nie zmieniło.
W takim skoro nie da się nic zrobić, no to zostanę przy ustawieniu routingu do wszystkich stron. Choć jednak uważam, że jakieś jest to dziwne rozwiązanie, bo muszę teraz routing ustawiać nawet do akcji, które nie mają widoku (a jedynie na przykład przekierowują) i jest to trochę dziwne no ale cóż.. skoro sie nie da inaczej...
ze4lot
a wyłączałeś domyślny routing zenda?
klapaucius
Cytat(ze4lot @ 8.01.2013, 15:24:01 ) *
a wyłączałeś domyślny routing zenda?

A co to jest ten domyślny routing? To: ?
Kod
resources.frontController.defaultControllerName = "index"
resources.frontController.defaultAction = "akcja1"
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.