Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] Profilowanie routingu
Forum PHP.pl > Forum > PHP > Frameworki
quality
Witam.

Mam mały poroblem z routingiem.
W jednym z komponentow mam taki router:

  1.  
  2. $articleWiesci = new Zend_Controller_Router_Route(
  3. 'Wiesci-z-kraju/*',
  4. array('module'=>'default','controller' => 'Wiesci-z-kraju', 'action' => 'index'));
  5.  
  6. $articleWiesciAdd = new Zend_Controller_Router_Route(
  7. 'Wiesci-z-kraju/Formularz/:action',
  8. array('module'=>'default','controller' => 'Wiesci-z-kraju'));
  9.  
  10. $articleWiesciStrona = new Zend_Controller_Router_Route_Regex(
  11. 'Wiesci-z-kraju/(\d+)-(.*)/*',
  12. array('module'=>'default','controller' => 'Wiesci-z-kraju', 'action' => 'show'),
  13. array(1 => 'id', 2 => 'description'));
  14.  
  15. $router->addRoute('article', $articleWiesci);
  16. $router->addRoute('article_form', $articleWiesciAdd);
  17. $router->addRoute('article_strona', $articleWiesciStrona);



Niestety ostatni nie działa tak jak trzeba. Sluzy on wyswietleniu konkretnego artykulu + paramtery ( * na koncu), jednak przy Zend_Controller_Router_Route_Regex gwiazda nie działa.

Nie wiem jak to ominąć. Wyczytałem cos o $router->chain(), ale nie moge jakos tego rozgryzc.

Z góry dziękuję i pozdrawiam

Ok moze mala pomoc tongue.gif

Posiedzialem troche i wykombinowalem cos takiego :
  1. $articleWiesciStrona = new Zend_Controller_Router_Route_Regex(
  2. 'Wiesci-z-kraju/(\d+)-?([a-zA-Z-]+)',
  3. array('module'=>'default','controller' => 'Wiesci-z-kraju', 'action' => 'show'),
  4. array(1 => 'id',2=>'description'));
  5.  
  6. $articleWiesciW = new Zend_Controller_Router_Route(
  7. '*');
  8.  
  9. $router->addRoute('article_strona', $articleWiesciStrona->chain($articleWiesciW));


Teraz widzi mi parametry dodane po adresie np: /Wiesci-z-kraju/5-Wyjazd-do-Warszawy/Strona/2, ale niestety nie widzi samego adresu: /Wiesci-z-kraju/5-Wyjazd-do-Warszawy

Macie jakies pomysly ?

Pozdrawiam
fander
U mnie taki router działa

  1. $router->addRoute('tescik',
  2. new Zend_Controller_Router_Route_Regex('wiadomosci/(\d+)-(.*)/([A-Za-z1-9]+)/(\d+|^)',
  3. array('module'=>'default','controller'=>'index','action'=>'index'),
  4. array( 1 => 'aaaa', 2 => 'bbbb', 3 => 'cccc', 4=>'dddd')));


Wywołanie adresu http://mojadomena.pl/wiadomosci/1-asdasdas...asdas/strona/12

i w kontrolerze

  1. public function indexAction(){
  2. echo '<pre>';
  3. print_r($this->getRequest()->getParams());
  4. echo '</pre>';
  5. }


wynik

Kod
Array
(
    [aaaa] => 1
    [bbbb] => asdasdasdasdasdas
    [cccc] => strona
    [dddd] => 12
    [module] => default
    [controller] => index
    [action] => index
)


U ciebie również powinno działać
quality
No tak. Taka konstrukcja dziala, jednak ja chciałem osiagnać coś innego.

U Ciebie dodatkowy parametr trzeba definiowac (Strona = 12), definiujesz to jako 3 i 4 parametr.

W standardowym routerze parametrow sie nie definiuje, tzn zastepujac gwiazdką adres, mamy z automatu Strona/1 - $strona = 1.

Np jak za strona chcesz dodac nastepny parametr, musisz znowu zmieniac routa i regexp, w standardowym Route jest to robione automatycznie.

Zalezy mi wlasnie na takim rozwiazaniu, dlatego kombinuje z chain()

Pozdrawiam
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.