2010-02-22 4 views
0

J'utilise le framework zend pour mon projet - j'ai essayé de configurer des liens propres - mais j'ai remarqué que mes liens semblent être vraiment très long et je me demande si à ce stade il y aurait un moyen d'incorporer une structure où je pourrais utiliser des liens plus petits.Besoin d'installer des liens plus propres - Liens trop longs - Zend framework

Voici un exemple de mon site un contrôleur de répertoire, qui a une action personne qui prend un paramètre id - donc alors un lien pour voir une personne d'un id certin ressemble:

www.mywebsite.com/directory/person/id/1809 

Il semble ok mais je travaille maintenant pour établir des liens plus lisibles et moteur de recherche convivial - Je voudrais avoir quelque chose comme - en supposant l'ID utilisateur 1809 est nommé John Smith:

www.mywebsite.com/directory/person/John-Smith-1809 

quelque chose de vraiment de base comme ce qui suit serait même mieux:

www.mywebsite.com/John-Smith-1809 

Bien que je ne sais pas comment je pourrais gérer cela sans mentionner un contrôleur ou une action ... des idées gars serait vraiment aider ...

Répondre

3

Jetez un oeil à la ZF Manual on how to use Routes.

Fondamentalement, vous avez besoin quelque chose comme ça pour le faire fonctionner:

$route = new Zend_Controller_Router_Route_Regex(
    '(.+)-(\d+)', 
    array(
     'controller' => 'directory', 
     'action'  => 'person' 
    ), 
    array(
     1 => 'name', 
     2 => 'id' 
    ), 
    '%s-%d' 
); 
$router->addRoute('directoryPerson', $route); 

Note: ne vous attendez pas à court de la boîte. Vous devrez probablement le modifier. Cela devrait vous mener dans la bonne direction.

0

Vous pouvez utiliser le module apache mod_rewrite Réécrire votre URL

http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html

<IfModule mod_rewrite.c> 

    RewriteEngine On 

    RewriteCond ###blah blah blah### 
    RewriteRule ###blah blah blah### 

</IfModule> 
+0

J'ai obtenu cette partie - je demande une technique pour vraiment raccourcir mes URL ici ... – Ali

+1

Ok cool. Vous pouvez utiliser mod_reqrite pour raccourcir les URL en mappant les URL courtes à vos versions actuelles. –

2

Comme une réponse précédente dit que vous pouvez utiliser une route Regex, mais pour commencer, il serait probablement plus facile d'utiliser un itinéraire « régulier » qui ressemble à:

http://yoursite.com/1234/John-Smith/

Dans votre bootstrap vous » d faire:

$frontController = Zend_Controller_Front::getInstance(); 
$router = $frontController->getRouter(); 

$router->addRoute('user', new Zend_Controller_Router_Route(
    ':user-id/:user-name/', 
    array(
     'module' => 'user', 
     'controller' => 'user', 
     'action' => 'read' 
    ) 
)); 

Cela ajoute un itinéraire appelé "utilisateur" au routeur, qui a la forme/nom d'utilisateur-ID utilisateur /, donc/1234/John-Smith /. Il va chercher un usercontroller dans un module utilisateur, et aller à l'action de lecture. Vous pouvez bien sûr changer cela en un autre module/contrôleur/action si vous le souhaitez.

Vous auriez alors ce User_UserController dans le module User, qui a un readAction(); Dans cette action, vous pouvez obtenir l'ID avec:

$userId = $this->_getParam('user-id'); 

Similaire, si vous en avez besoin, vous pouvez récupérer le nom.

$userName = $this->_getParam('user-name'); 

Dans un script de vue, vous pouvez générer une URL pour cette route avec:

<?php echo $this->url(array('user-id' => 1234, 'user-name' => 'John Smith'), 'user', true); ?> 

Notez le paramètre « utilisateur », qui indique au routeur d'utiliser le « utilisateur » la route, nous avons défini plus tôt.