Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [zf] router - reverse
Forum PHP.pl > Forum > PHP > Frameworki
marcin573
Mam taką konf rutera

  1. resources.router.routes.pageroute.type = Zend_Controller_Router_Route_Regex
  2. resources.router.routes.pageroute.route = "([a-z0-9\-/\._]+)*"
  3. resources.router.routes.pageroute.defaults.module = "default"
  4. resources.router.routes.pageroute.defaults.controller = "index"
  5. resources.router.routes.pageroute.defaults.action = "index"
  6. resources.router.routes.pageroute.reverse = "%s"
  7. resources.router.routes.pageroute.map.1 = "seourl"


i jest problem z reverse
  1. $this->view->url(array('seourl' => 'kategorie/sport.html'), '', true);


wyświetla taki link: kategorie%2Fsport.html a chciał bym oczywiście kategorie/sport.html
Pilsener
Bo znak "/" jest znakiem specjalnym, wykorzystywanym w Zend_Route do oddzielania parametrów. Bez problemu użyjesz średnika, przecinka etc. Ja używam "/" tylko przy pracy ze standardowym routingiem Zenda, słowa w seo-string łącze myślnikiem a parametry oddzielam przecinkiem.

Nie jestem pewny, czy można ten "/" separator prosto zmienić, trzeba by przeanalizować kod frameworka. Szczerze wątpię, by ktoś coś takiego okodował. Najprościej będzie po prostu się go pozbyć i już, zrobić adres:
Cytat
kategorie-sport.html


Przecież to żadna różnica.
phpion
Wtrącę się: nie znam ZF, ale jakoś nie chce mi się wierzyć by taka forma linków była niemożliwa. Jeśli tak faktycznie jest to cóż - moim zdaniem wpadka! Piszesz, że nie ma większego znaczenia link kategorie/sport.html vs kategorie-sport.html. Może i nie ma, ale ja np. jestem dość upierdliwym jegomościem i zdecydowanie bardziej preferuję zapis z /. Slash jest synonimem ścieżki, tak więc dużo bardziej do mnie przemawia adres kategoria/obuwie/sportowe/meskie.html niz kategoria-obuwie-sportowe-meskie.html Patrząc na sam adres wiem jak głęboko jestem w drzewie kategorii, że prezentowane mi dane są zawężeniem pewnej szerszej kategorii. Jeśli zatem ZF zarezerwował sobie / i niemożliwym jest wykorzystanie go w routingu to porażka smile.gif Kohana 2 czy wyśmiewany przez większość CodeIgniter bez problemu sobie z tym radzi, a turbo obiektowy ZF nie?
zordon
dostajesz %2F prawdopodobnie dlatego, że domyślnie string który przekazujesz jest encodowany.
Zobacz w dokumentacji, prawdopodobnie ten parametr ustawia się jako któryś kolejny parametr helpera url.

ten parametr zadziała na cały string, który przekazujesz więc będziesz musiał inne części url encodować ręcznie
Pilsener
Z tego co widzę brak takiej opcji w helperze url thumbsdownsmileyanim.gif

Ale może ktoś to dorobił w nowej wersji frameworka, wiadomo, dokumentacja nie nadążą często wink.gif

Pozostaje napisać własny helper:
  1. class Zend_View_Helper_MyUrl extends Zend_View_Helper_Url{
  2. public function myurl(array $urlOptions = array(), $name = null, $reset = false, $encode = true){
  3.  
  4. }
  5. }
  6.  


Oczywiście jeśli adresy ze "/" wpisanym "z palca" będą działać bez problemu. Bo jest jeszcze kwestia tych standardowych zendowych adresów typu strona.pl/moduł/kontroler/akcja/parametr1/wartość1/parametr2/wartość2 itd.

Dobrze, żeby działały, bo potem możemy mieć problem przy rozbudowie/debugowaniu aplikacji.
zordon
Z pliku źródłowego helpera:

  1. public function url(array $urlOptions = array(), $name = null, $reset = false, $encode = true)
Pilsener
Fakt, można ale nie jest to zbyt praktyczne:
1. Trzeba samemu normalizować seo-string (usuwać znaki specjalne etc.)
2. Za każdym razem trzeba podawać wszystkie parametry gdy tworzymy adres przez $this->url

Myślałem bardziej o czymś takim jak w paginatorze, np. ->setDefaultPageRange, ustawiasz globalnie sobie dla całej aplikacji. Dobre byłyby też różne opcje normalizacji stringu (np. zamiana spacji na myślnik).
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.