2012-04-02 1 views
0

Je me demande comment puis-je faire de jolies URLs avec zend framework?comment faire joli url dans le cadre zend?

des renseignements généraux:

mon URL est en ce moment: www.website.com/profile/43

la structure de base de données est:

id userid name 
1 43  John 
.. ...  ... 

et mon routeur est:

$router->addRoute('getUserid', 
      new Zend_Controller_Router_Route(
        '/profile/:id', 
        array(
          'module' => 'profile', 
          'controller' => 'social', 
          'action' => 'index' 

        ) 
      ) 
    ); 

évidemment je voudrais l'URL doit être: www.website.com/profile/JohnÀ partir de ce que je recherche il me semble que je peux faire beaucoup de choses avec le routeur, ajouter regexp, etc, mais rien sur la façon de remplacer le id comme dans mon cas.

que je dois faire une requête pour trouver le nom et je pensais à le faire dans le preDispatch et utiliser le résultat comme une variable par défaut, mais je ne sais pas id depuis le $front->getRequest()->getParams() n'est pas disponible:

$name = // do query to find out the name; 

$router->addRoute('getUserid', 
      new Zend_Controller_Router_Route(
        '/profile/:id', 
        array(
          'id' => $name, 
          'module' => 'profile', 
          'controller' => 'social', 
          'action' => 'index' 

        ) 
      ) 
    ); 

peut-être im allant à ce point du mauvais. Des idées?

merci.

+0

Quel est le problème avec votre implémentation actuelle? Pourquoi voulez-vous le changer? – zerkms

+0

J'ai besoin que l'id soit 'john' au lieu de '43' – Patrioticcow

+0

faites cela dans votre contrôleur. Ce n'est pas un travail de routeur. – zerkms

Répondre

1

C'est plus général que la question spécifique à ZF. Ce que vous pouvez faire ici pour rendre l'URL agréable et enregistrer votre URL avec des classements élevés est implémenté dans WordPress et appelé limaces. Slug est juste le titre du poste (juste des espaces remplacés par un trait d'union et etc). Mais évidemment, il peut y avoir deux postes avec le même titre (et, automatiquement, slug). Donc, si le slug pour le nouveau poste existe déjà, il est ajouté par le numéro '1' à la fin. S'il existe également, il est ajouté par "2" et se répète jusqu'à ce qu'il obtienne quelque chose d'unique. Évidemment, vous devez ajouter une colonne dans la table pour le slug.

Donc, dans votre cas, le premier utilisateur portant le nom John a l'adresse www.website.com/profile/John. L'utilisateur suivant avec le nom John a l'URL www.website.com/profile/John1 et ainsi de suite.