Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] Zend_Controller_Router_Route_Regex zamiast "/" ","
Forum PHP.pl > Forum > PHP > Frameworki
b_84
Witam,
Kombinuję i wykombinować nie mogę.
Otóż chcę uzyskać friendly link, ale bez "/" tylko z przecinkiem.
Funkcja w Bootstrapie.
W przypadku ścieżki bez parametrów działa.
Przyznam się bez bicia, że pierwszy raz próbuję tej sztuczki.
Chodzi dokładnie o coś takiego

/article/id/10 zamieniamy na /artykul,23,nazwa_artykulu.html

Ma ktoś pomysł jak rozwiązać ten problem?
Z góry dzięki.

  1. protected function _initRoute()
  2. {
  3. $front = Zend_Controller_Front::getInstance();
  4. $router = $front->getRouter();
  5.  
  6. $oRoutes = Model_Router::getRoutes();
  7. foreach ($oRoutes as $route)
  8. {
  9. $link = $route->link;
  10.  
  11. if($route->link_params && $route->link_params_default){
  12. $link = $link."%s.html";
  13.  
  14. $aDefParams = explode(';', $route->link_params_default);
  15. $route_params = array();
  16.  
  17. foreach ($aDefParams as $defParam)
  18. {
  19. $dParam = explode ('=' ,$defParam);
  20.  
  21. if($dParam[0] && $dParam[1]!='')
  22. $route_params[$dParam[0]] = $dParam[1];
  23. }
  24. //ścieżka z paremetrami.
  25. $router->addRoute("route_$route->link_id",
  26. new Zend_Controller_Router_Route_Regex("$link",
  27. array('module'=> $route->link_module,
  28. 'controller'=>$route->link_controller,
  29. 'action'=>$route->link_action,
  30. $route_params
  31. )
  32. ));
  33.  
  34. }else{
  35. //ścieżka bez paremetrów.
  36.  
  37. $router->addRoute("route_$route->link_id",
  38. new Zend_Controller_Router_Route("$link",
  39. array('module'=>"$route->link_module",
  40. 'controller'=>"$route->link_controller",
  41. 'action'=>"$route->link_action")
  42. ));
  43.  
  44.  
  45. }
  46.  
  47. }
  48.  
  49. }
  50.  
CzarnyGsm
Ja ten problem rozwiązałbym tak:

W pliku Bootstrap dodajemy funkcję:
  1. public function _initRoutes()
  2. {
  3. $this->bootstrap('frontController');
  4. $router = $this->getResource('frontController')->getRouter();
  5.  
  6. if(APPLICATION_ENV == 'production')
  7. {
  8. $router->removeDefaultRoutes();
  9. }
  10. $router->addConfig(new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini'));
  11.  
  12. }

Następnie w katalogu configs tworzysz plik routes.ini a w nim:
  1. article.type = "Zend_Controller_Router_Route_Regex"
  2. article.route = "artykul,([0-9]+),([a-zA-Z0-9_-]+).html"
  3. article.defaults.module = "default"
  4. article.defaults.controller = "nazwa-twojego-kontrolera"
  5. article.defaults.action = "nazwa-twojej-akcji"
  6. article.map.1 = "id"
  7. article.map.2 = "title"
  8. article.reverse = "artykul,%d,%s.html"


PS Dziwny ten adres masz tj. /article/id/10. Nie widzę tu nazwy akcji. Chyba, że literówka Ci się wkradła albo coś ja źle rozumuje.

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.