2013-02-05 7 views
1

OK, je ne sais pas si je prends la mauvaise approche ou non, mais je suis coincé ici ...CakePHP: Rediriger à routes.php

Nous avons développé notre site Web et nous avons beaucoup de contrôleurs et attendent ids variables spéciales , liens redirigeant déjà vers les contrôleurs passant ce qui est attendu.

La nouvelle exigence est d'utiliser friendlyUrls et l'idée est qu'au lieu d'avoir:

http://domain.com/search/advanced/term:head/city:/set:show-all/sort:basic-relevance

il lit maintenant

http://domain.com/search/head

ou en passant des options.

http://domain.com/search/in-edinburgh-scotland/by-rating/head

Mon idée était de, au début du routes.php ont un simple si tel que:

$friendlyUrl = $_SERVER['REQUEST_URI']; 
    $friendlyUrl = split('/', $friendlyUrl); 
    foreach ($friendlyUrl as $key => $params) { 
     if(empty($params)){ 
      unset($friendlyUrl[$key]); 
     } 
     if($params == 'search'){ 
      Router::connect('/search/*', array('plugin'=>'Search','controller' => 'Search', 'action' => 'advancedSearch', 'term'=>'head)); 

     }elseif ($params == 'employers') { 
      # code... 
     }elseif ($params == 'employer-reviews') { 
      # code... 
     }elseif ($params == 'jobs') { 
      # code... 
     } 
    } 

qui ne fonctionnait pas, alors j'ai essayé d'ajouter quelque chose de similaire dans mon AppController et rien.

En tout la chose qui a à faire est:

  • Url être dans le format de:/Recherche/{terme}
  • En fait réaffecterons à:/Recherche/avancée/{terme }/ville: {option}/set: show-all/tri: pertinence-base
  • barre d'URL pour continuer à lire:/Recherche/{terme}

Quelqu'un a une idée ?! Merci

Répondre

2

Vous voulez certainement jeter un oeil à la page de routage dans le livre

http://book.cakephp.org/2.0/en/development/routing.html

Il y a des tonnes d'options là-bas pour correspondre à des modèles d'URL pour transmettre des paramètres aux contrôleurs.

Router::connect(
'/search/:term', 
array('controller' => 'search', 'action' => 'advanced'), 
array(
    'pass' => array('term') 
) 
); 

Vous devriez probablement définir les valeurs par défaut pour la ville & mis & tri dans les actions fonction des définitions des paramètres:

public function advanced($term, $city='optional', $sort = 'basic'){ 
    // your codes 
} 

La grande chose au sujet de le faire de cette façon, est que votre $ this-> Html -> link reflétera les routes dans les chemins qu'elles génèrent. (routage inverse)

Les routes dans le gâteau sont assez puissants, vous devriez être en mesure d'obtenir quelques URLs décents avec eux. Une autre chose que j'ai utilisée est d'utiliser un comportement - sluggable - pour générer un champ interrogeable à partir du titre des éléments de contenu - pour les pages/types de contenu dans les cms.

bonne chance!

+0

Ce problème n'est-il pas possible pour Router :: redirect? Question: http://stackoverflow.com/questions/17976154/cakephp-redirect-routing – trante

Questions connexes