2012-12-06 3 views
0

Il existe des URL d'article dans une base de données (par exemple "article1", "article2", "article3").Routage Zend sans contrôleur et action

Lorsque je tape www.example.com/article1, je souhaite router vers controller: index, action: index.

Mon itinéraire:

//Bootstrap.php 
public function _initRoute(){  
    $frontController = Zend_Controller_Front::getInstance(); 

    $router = $frontController->getRouter(); 
    $router->addRoute('index', 
     new Zend_Controller_Router_Route('article1', array(
      'controller' => 'index', 
      'action' => 'index' 
     )) 
    ); 
} 

Mais quand je clique sur un autre lien (fonctionnel avant), je reçois www.example.com/article1 à nouveau. Est-il possible de faire cette route généralement pour toutes les URL dans la base de données? Quelque chose comme:

$router->addRoute('index', 
     new Zend_Controller_Router_Route(':article', array(
      'controller' => 'index', 
      'action' => 'index' 
     )) 
    ); 

Répondre

0

Je mets habituellement un fichier .ini au lieu d'aller la route xml ou chemin « new Zend_Controller_Router_Route ». À mon avis c'est un peu plus facile à organiser. C'est comme ça que je fais ce que tu cherches. Je recommande que faire quelques changements à votre routage et ne pas utiliser un itinéraire de http://domain.com/article1 mais plus comme http://domain.com/article/1. De toute façon, voici ce que je ferais dans votre situation.

Dans votre fichier routes.ini

routes.routename.route = "route" 
routes.routename.defaults.module = en 
routes.routename.defaults.controller = index 
routes.routename.defaults.action = route-name 
routes.routename.defaults.addlparam = "whatevs" 

routes.routename.route = "route2" 
routes.routename.defaults.module = en 
routes.routename.defaults.controller = index 
routes.routename.defaults.action = route-name 
routes.routename.defaults.addlparam = "whatevs2" 

routes.route-with-key.route = "route/:key" 
routes.route-with-key.defaults.module = en 
routes.route-with-key.defaults.controller = index 
routes.route-with-key.defaults.action = route-with-key 

Dans votre fichier d'amorçage

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 

#... other init things go here ... 

protected function _initRoutes() { 

    $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini'); 
    $front = Zend_Controller_Front::getInstance(); 
    $router = $front->getRouter(); 
    $router->addConfig($config,'routes'); 
    $front->setRouter($router); 
    return $router; 

    } 

} 

Dans votre contrôleur, vous pouvez le faire

class IndexController extends Zend_Controller_Action { 

    public function routeNameAction() { 
     // do your code here. 
     $key = $this->_getParam('addlparam'); 

    } 

    public function routeWithKeyAction() { 

     $key = $this->_getParam('key'); 

     // do your code here. 

    } 
} 
+0

Il est pas ce que je cherche . Pourriez-vous éditer votre poste sans paramètre "clé"? Exemples d'URL: www.example.com/new-article, www.example.com/best-article ... Un seul "paramètre" se trouve à la fin de www.example.com/ – user1876221

+0

. C'est ce que le premier bloc est dans le * .ini section, vous pouvez créer autant de ces "routes" que vous avez besoin. Si vous avez besoin de transmettre des paramètres supplémentaires, vous pouvez également utiliser ces blocs routes.routename.defaults.addlparam = "quoi que vous vouliez"; vous pouvez également accéder à ces paramètres. De cette façon, vous pouvez avoir plusieurs routes pointant vers un contrôleur. –

Questions connexes