2010-03-28 4 views
4

J'ai un contrôleur beaucoup dans mes applications CodeIgniter, ex: Inscription, Profil, Main, etc ..comment créer une route Codeigniter qui ne remplace pas les routes d'autres contrôleurs?

Maintenant, je veux construire "utilisateur" contrôleur.

ce que je veux:

  • si les gens vont à url: example.com/signup, je veux utiliser la route par défaut "Signup" Contrôleur
  • si les gens vont à url: example.com/bobby.ariffin, Je veux rediriger ceci à "Utilisateur" Contrôleur parce que l'URL n'est pas géré par un contrôleur dans mes applications.

j'avais créer dans mon config/routes.php:

$route['(:any)'] = "user"; 

mais il est prioritaire sur toutes la route dans mes applications pour "utilisateur" contrôleur.

Existe-t-il une route simple pour Codeigniter qui ne remplace pas les autres routes de contrôleur?

Mise à jour ---

J'ai regex simple pour ce problème, à partir de: Daniel Errante's Blog

$route['^(?!ezstore|ezsell|login).*'] = “home/$0″; 

où EZStore, ezsell et connexion sont le nom du contrôleur dans vos applications.

Répondre

3

Vous allez devoir définir explicitement toutes ces routes. Sinon, vous finirez toujours par "user_controller".

$route['signup'] = "signup"; 
$route['(:any)'] = "user/display/$1"; 

ou quelque chose de similaire. Ils sont exécutés dans l'ordre, donc ce qui est défini en premier, va arriver en premier. Donc, si vous attrapez (: any), vous allez envoyer quelque chose à ce contrôleur. De plus, gardez à l'esprit que vous pouvez utiliser des expressions régulières, donc si vous savez qu'il y aura toujours un '.' là-bas, vous pourriez tester pour cela.

+1

"Vous allez devoir définir explicitement toutes ces routes" Aïe! vraiment strict. Oui, je pense que je devrais le faire. Merci de partager ... – bakazero

5

Vous pouvez également utiliser une instruction foreach pour cela. De cette façon, vous pouvez garder vos contrôleurs dans une bonne liste.

$controller_list = array('auth','dashboard','login','50_other_controllers'); 

foreach($controller_list as $controller_name) 
{ 
    $route[$controller_item] = $controller_name; 
} 

$route['(:any)'] = "user/display/$1"; 
Questions connexes