Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Domyślny routing
Forum PHP.pl > Forum > PHP > Frameworki
barthek23
Witam,

Ustawiłem sobie taki router

Cytat
www.adres.pl/tomek


  1. $router = Zend_Controller_Front::getInstance()->getRouter();
  2. $profil = new Zend_Controller_Router_Route_Regex('(.+)',
  3. array('module' =>'default','controller'=>'user', 'action'=>'profil'),
  4. array(1 => 'name'),'%s');
  5. $router->addRoute('profil',$profil);


I teraz nie mogę się dostać do standardowego routera czyli np. /user/profile/ bo wszystko jest traktowane pod powyższy router.
Czy jest możliwość ustawienia routerów tak aby najpierw był brany pod uwagę standardowy dopiero później dodatkowe?
pawv
  1. <?= $this->url(array(),'default',true);?>


drugi parametr odpowiada za routing, default to nazwa podstawowego routingu
barthek23
Nie chodzi mi o generowanie linku wedłgu routera.
Tylko chciałbym osiągnąć taki efekt że jak ktoś wejdzie w taki link
Cytat
www.adres.pl/tomekk

To zadziała zdefiniowany kontroller.
Ale jeżeli wejdziemy na np.
Cytat
www.adres.pl/user/profil

gdzie user to controller a profil action, zadziała defaultowy router.
W tej chwili coby nie zostało wpisane po / definiowane jest przez napisany przeze mnie router.
Czy da się poprostu zrobić tak żęby ważniejszy był defaultowy router a dopiero po nim zdefiniowane.
pawv
Twój router przede wszystkim jest źle napisany, ponieważ nadpisuje defaultowy router. Każdy string wprowadzony w adresie traktowany jest jako poprawna wersja routingu profil.
Możesz np. dodać prefiks po którym Twój routing będzie rozpoznawany.
  1. $router->addRoute(
  2. 'profil',
  3. new Zend_Controller_Router_Route(
  4. '/profil/:name',
  5. array('module' =>'default','controller'=>'user', 'action'=>'profil')
  6. )
  7. );


Teraz gdy w url wpiszesz http://twojastrona.com/profil/darekk, wywołany zostanie routing profile i dodatkowo działał będzie też adres http:/twojastrona.com/default/user/profil/name/darekk
bmL
Routery są dopasowywane w odwrotnej kolejności do kolejności w jakiej były dodawane (z tego co pamiętam). Możesz spróbować usunąć standardowe routery i dodać je ponownie po twoim routerze ale tu z kolei nie wiem czy załapie ten od profilu bo będzie przysłaniany przez:
(pozwól że posłużę się konfigiem):
Kod
resources.router.routes.controller_only.route = "/:controller/"
resources.router.routes.controller_only.defaults.action = "index"

Tak więc pewnie będziesz musiał dodać coś co będzie jednoznacznie określało (np. tak jak zaproponował przedmówca) jaki routing powinien być zastosowany.
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.