2010-05-09 6 views
2

Je voudrais obtenir une liste de tous les contrôleurs dans un projet Codeiginiter afin que je puisse facilement passer en revue chacun d'eux et ajouter des routes définies. Je n'arrive pas à trouver une méthode qui me donnera ce que je veux?Comment obtenir un tableau de tous les contrôleurs dans un projet Codeigniter?

Voici l'extrait de code du fichier routes.php où je voudrais accéder au tableau: -

// I'd like $controllers to be dynamically populated by a method 
// 
$controllers = array('pages', 'users'); 

// Loop through each controller and add controller/action routes 
// 
foreach ($controllers as $controller) { 
    $route[$controller] = $controller . '/index'; 
    $route[$controller . '/(.+)'] = $controller . '/$1'; 
} 

// Any URL that doesn't have a/in it should be tried as an action against 
// the pages controller 
// 
$route['([^\/]+)$'] = 'pages/$1'; 

MISE À JOUR # 1

Pour expliquer un peu plus ce que je suis essayer d'atteindre .. J'ai un contrôleur Pages qui contient des pages telles que sur, contactez-nous, la vie privée, etc. Ces pages devraient être accessibles via/about,/contact-us et/privacy. Donc, fondamentalement, toute action/méthode dans le contrôleur Pages devrait être accessible sans avoir à spécifier/pages/<action>.

Vous ne savez pas si je vais dans ce sens?

+0

@ash, Seriez-vous mieux servi à faire ce que vous essayez avec .htaccess? Une brève explication de pourquoi/ce que vous essayez de faire serait cool aussi, merci! – k00k

Répondre

7

Eh bien, pour répondre directement à la question de codage, vous pouvez le faire:

foreach(glob(APPPATH . 'controllers/*' . EXT) as $controller) 
{ 
    $controller = basename($controller, EXT); 

    $route[$controller] = $controller . '/index'; 
    $route[$controller . '/(.+)'] = $controller . '/$1'; 
} 

cela peut ne pas Buuuuuut travailler à être la méthode la plus souple plus bas la ligne.

Il existe d'autres façons de le faire. La première consiste à créer un MY_Router et à insérer

$this->set_class('pages'); 
$this->set_method($segments[0]); 

avant/au lieu de show_404();

Cela enverra/contactera/pages/contact, mais seulement si aucun contrôleur, méthodes, itinéraires sont mappés en premier.

OOOOOOORRRRRR utilisation Modular Separation et ajoutez ce qui suit à votre principale routes.php

$routes['404'] = 'pages'; 
+0

Merci beaucoup :) Deux excellentes options! – ash

+2

3 bonnes options. ;-) –

+0

Très utile! Merci :) –

Questions connexes