Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZendFramework] Routing - domyślna wartość w url, oraz dodawanie niezdefiniowanych parametrów do url
kaem
post
Post #1





Grupa: Zarejestrowani
Postów: 248
Pomógł: 38
Dołączył: 29.06.2008

Ostrzeżenie: (0%)
-----


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.

Ten post edytował kaem 28.12.2011, 17:03:24
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Pilsener
post
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
kaem
post
Post #3





Grupa: Zarejestrowani
Postów: 248
Pomógł: 38
Dołączył: 29.06.2008

Ostrzeżenie: (0%)
-----


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ąć?

Ten post edytował kaem 28.12.2011, 17:05:18
Go to the top of the page
+Quote Post
Pilsener
post
Post #4





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
kaem
post
Post #5





Grupa: Zarejestrowani
Postów: 248
Pomógł: 38
Dołączył: 29.06.2008

Ostrzeżenie: (0%)
-----


Dzięki działa (IMG:style_emoticons/default/smile.gif)

Swoją drogą moim zdaniem trochę pokręcony jest system routingu w Zendzie.. brakuje mi coś na wzór tego z Agavi.
Go to the top of the page
+Quote Post
Prph
post
Post #6





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 4.03.2006
Skąd: Łódź

Ostrzeżenie: (0%)
-----


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ą.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 20:35