Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Routing - domyślna wartość w url, oraz dodawanie niezdefiniowanych parametrów do url
Forum PHP.pl > Forum > PHP > Frameworki
kaem
Witam, ucząc się ZF napotkałem na problem ustawienia domyślnej wartości w generowanym adresie url. W application.ini mam:
  1. resources.router.routes.naswojeksiegi.route = "statyczny-tekst/:year/*";
  2. resources.router.routes.naswojeksiegi.defaults.controller = "wierszyk";
  3. resources.router.routes.naswojeksiegi.defaults.action = "naswojeksiegi";
  4. resources.router.routes.naswojeksiegi.defaults.year = 1234;
  5. resources.router.routes.naswojeksiegi.reqs.year = "\d+"

Mając 'route = "statyczny-tekst/:year/*";' generuje mi takiego linka 'costam/statyczny-tekst' bez ustawionego 'year', a chciałbym mieć taki adres:
statyczny-tekst/1234.html.
Jak zrobię
  1. resources.router.routes.naswojeksiegi.route = "statyczny-tekst/:year/.html";
to wstawia za 'year' wartość 1234, ale url wygląda tak:
statyczny-tekst/1234/.html. Próbowałem różnych kombinacji wartości route, ale nie moge dojść jak to zapisać. Pomoże ktoś?

PS: chciałem zrobić tak jak to jest TUTAJ(zend manual) w 1-szym przykładzie.
Pilsener
No dobrze, ale w czym jest problem?
Default jest głównie po to, żeby ustawić wartość zmiennej jeśli nie jest ona przekazywana w adresie.
Parametry są automatycznie opuszczane od prawej do lewej.
Jeśli chcesz mieć rok w adresie to dlaczego go nie przekażesz do helpera url?

Inaczej nie miałoby to sensu - defaultowy parametr zawsze występowałby w adresie niezależnie od woli programisty i tego, czy jest aktualnie potrzebny czy nie.
kaem
Więc tak: chce mieć taki adres, żeby bezpośrednio za zmienną było '.html' czyli np. 'jakis/adres/MOJA-ZMIENNA.html'. Nie wiem jak ustawić wartość resources.router.routes.naswojeksiegi.route aby to osiągnąć.
Adres generuje za pomocą funkcji url:
  1. $this->url(array(), 'naswojeksiegi')


Cytat
Jeśli chcesz mieć rok w adresie to dlaczego go nie przekażesz do helpera url?
Czasami miałem takie sytuacje, że pod zmienną pobieraną z bazy nie było żadnej wartości, i żeby nie psuć linka musiałem dodać jakąś domyślną wartość.


Mam jeszcze jedno pytanie:
1. Czasami chciałbym przekazać parametry, które nie były wcześniej zdefiniowane, czyli np. robię tak:
  1. echo $this->url(array('zmienna1' => 'wartosc1', 'year' => '2011'), 'naswojeksiegi')
ale zmienna1 nie jest generowana w url. Czyli chce mieć coś takiego: 'jakis/adres/2011.html?zmienna1=wartosc1' Jak to można osiągnąć?
Pilsener
1. Jak chcesz dokleić .html na końcu to musisz użyć routera regexp, ewentualnie popatrzeć na możliwości jakie daje route_chain (ale nigdy się tym nie bawiłem, wiem tylko, że dzięki temu można łączyć ze sobą routingi)

2. Jak chcesz mieć routing elastyczny, ktory dokleja parametry do adresu to masz kilka opcji:
- użyć zwykkłego route z regułą zawierającą gwiazdkę na końcu /:zmienna/* (wtedy kolejne zmienne będą doklejana tak jak w defaultowym routingu)
- ręcznie doklejać zmienne do adresu w sposób ?param=value
- napisać własny routing który uwzględni wszystkie Twoje zachcianki
kaem
Dzięki działa smile.gif

Swoją drogą moim zdaniem trochę pokręcony jest system routingu w Zendzie.. brakuje mi coś na wzór tego z Agavi.
Prph
Możesz stworzyć własny helper URL z identycznymi parametrami jak oryginalny. W nim wywołasz właściwy helper url, dokleisz do niego .html. Tylko będziesz potrzebował jeszcze plugin front kontrolera z preRoute, które usunie .html. To taka nadbudowa, ale stosowałem podobne i działają.
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.