2008-12-19 9 views
0

Eh bien, je dois faire en sorte que tout utilisateur peut avoir un foo.com/nom d'utilisateur dans mon site où j'utilise un framework Zend. Le fait est que je veux que foo.com/login et d'autres contrôleurs continuent de fonctionner comme ils le font, donc je valide déjà qu'aucun utilisateur ne peut être nommé comme l'un des contrôleurs que j'utiliserai. Le htaccess ne peut pas être changé ou la configuration de mvc ne fonctionnera pas. Donc im en utilisant le routeur.Comment créer un fichier foo.com/user dans Zend?

Je sais que si j'utiliser quelque chose comme:

$routes = array(); 
     $routes['entry'] = new Zend_Controller_Router_Route_Regex('SOME REGEX HERE', 
      array( 
       'controller' => 'profile', 
       'action'  => 'show' 
      ), 
      array( 
       'id' => "dsadsa", // maps first subpattern "(\d+)" to "id" parameter 
       1 => 'id' // maps first subpattern "(\d+)" to "id" parameter 
      ) 
     ); 

$router->addRoutes($routes); 

je peux faire si tout ce qui correspond à l'expression régulière est redirigé, mais je ne sais pas s'il y a une meilleure façon (en quelque sorte enchaînant 2 routeurs) où i Je n'ai pas besoin de répertorier mes contrôleurs dans un très grand OU.

Une idée?

Répondre

0

Quelque chose comme cela devrait fonctionner:

$routes = array(); 

$routes['entry'] = new Zend_Controller_Router_Route(
    ':userName', 
    array( 
     'controller' => 'profile', 
     'action'  => 'show' 
    ) 
); 

ajouter ensuite toutes les autres routes, pour/login,/fermeture de session, etc. Comme l'a dit Tim, Zend correspond à des itinéraires dans l'ordre inverse, il va essayer de correspondre à votre "liste blanche" des routes avant de finalement l'envoyer à votre "nom d'utilisateur" itinéraire. Ceci effacera tout type de vérification d'erreur Zend fait pour s'assurer que le contrôleur/action existe, puisque tout sera routé vers/profile/show s'il n'y a pas de correspondance de route.

Tout cela pourrait être facilement évité, cependant, si vous pouviez traiter avec foo.com/user/ < nom d'utilisateur >.

0

Vous devriez être en mesure de définir votre itinéraire nom d'utilisateur (votre route regex ci-dessus) et l'ajouter au routeur, puis il suffit d'ajouter vos itinéraires de commande, par exemple:

$router->addRoute('user', new Zend_Controller_Router_Route('controller/:var'));

Zend va essayer de faire correspondre la requête aux routes définies, dans l'ordre inverse. Si je demande ne correspond pas à l'un de vos itinéraires de contrôleur, il va alors essayer de le faire correspondre à votre route regex.

Questions connexes