Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZF][ZendFramework][zend] Zend_Controller_Router_Route - problem
r4nd4ll
post 7.08.2010, 08:22:28
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 5
Dołączył: 10.05.2009

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


Witam,
Tworzę wersje językowe do swojego serwisu i trochę w pewnym miejscu utknąłem.. a dokładniej na trasach routingu.

Otóż chcę by w przypadku gdy nie jest ustawiony parametr lang (wersja polska) ścieżka wyglądała w sposób następujący:
kontroler/akcja/nazwa_parametru/wartosc_parametru/etc z innymi parametrami (jeśli są ustawione w $_GET)

Natomiast jeśli jest parametr lang (inne wersje językowe):
en/kontroler/akcja/nazwa/wartosc/etc.

Mam takie 2 reguły w Bootstrapper/_initRoutes() :
$router->addRoute(
'controlleraction', new Zend_Controller_Router_Route('/:controller/:action/*', array('lang' => 'pl'))
);

$router->addRoute(
'langcontrolleraction', new Zend_Controller_Router_Route('/:lang/:controller/:action/*', array('lang' => 'pl'))
);
Reguły te (jak mniemam) wzajemnie się wykluczają..
W przypadku pierwszej skutek daje tylko nie podanie parametru lang, w przeciwnym wypadku lang jest traktowany jako controller (co jest logiczne)..
Natomiast w drugim przypadku jest dokładnie na odwrót..

Moje pytanie jest następujące: czy zamierzony przeze mnie efekt jest możliwy do osiągnięcia bez deklarowania osobno tras routingu do każdej akcji (wykorzystuję różne paramtry w $_GET - dlatego użyłem "/*")? Jeśli tak, to proszę o jakąś wskazówkę, która mnie naprowadzi bądź fragment kodu trasy routingu, który mógłby rozwiązać mój problem. W ostateczności użyję drugiej reguły i nawet w przypadku wersji polskiej będę przekazywać "pl" w adresie, jeśli jednak da się to zrobić w bardziej elegancki sposób to zdecydowanie bardziej by mi odpowiadał.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
quality
post 8.08.2010, 20:46:15
Post #2





Grupa: Zarejestrowani
Postów: 172
Pomógł: 9
Dołączył: 13.02.2006
Skąd: Warszawa

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


Zrob dwie trasy routingu, cos w podobie jak teraz, tylko w odwrotnej kolejnosci je dodaj.

Zeby to dzialalo musisz tylko dodac 3 parametr do route z lang, okreslajacy jaki ma byc lang np:
  1. $route = new Zend_Controller_Router_Route(
  2. ':lang/:action/:id/:data',
  3. array('module'=>'default', 'lang'=>'pl', 'controller'=>'index',
  4. 'action'=>'index', 'id'=>false, 'data'=>false), //Wartości domyślne
  5. array('lang'=>'[a-z_]+'));


"array('lang'=>'[a-z_]+')" ten parametr okresla wartosci jakie moze przyjmowac lang, daj tak jak teraz tylko dodaj ze moze miec tylko dwa znaki, jesli bedziesz mial kontrolery z wieksza iloscia znakow, route bedzie dopasowywal do pierwszego, standarowego routa. ROute z "lang" zostanie pominiety smile.gif

Pokombinuj cos w tym stylu powinno sie udac.

Pozdrawiam Adrian


--------------------
Go to the top of the page
+Quote Post
r4nd4ll
post 8.08.2010, 21:12:16
Post #3





Grupa: Zarejestrowani
Postów: 38
Pomógł: 5
Dołączył: 10.05.2009

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


Super, hula! dzięki smile.gif
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.06.2025 - 13:01