2009-05-22 5 views
3

Je construis un site CakePHP pour un client et j'ai un problème intéressant. Ils souhaitent ajouter une nouvelle fonctionnalité permettant aux utilisateurs de créer leurs propres pages de destination sur le site à l'aide de ce type d'URL: http://mainsite.com/username. Comme il s'agit d'un site Cake, il y a beaucoup de valeurs pour username qui entraîneraient toutes sortes de folie de routage, surtout s'il leur arrivait de choisir un nom d'utilisateur qui était le même qu'un contrôleur dans le site.Comment obtenir une liste de noms de contrôleurs dans CakePHP pour valider les données utilisateur?

Mon approche est quelque chose comme ceci: dans la fonction beforeValidate du contrôleur d'utilisateurs, vérifiez le nom d'utilisateur fourni contre une liste de tous les noms de contrôleur et renvoyez false s'il y a une correspondance. Ma question est - comment puis-je obtenir une liste de tous les noms de contrôleurs (à court de boucler effectivement sur les fichiers dans /app/controllers)? Est-il même possible de faire cela?

Merci!

Répondre

6

Vous pouvez probablement utiliser CakePHP 1.x

$Controllers = Configure::listObjects('controller') 

CakePHP 2.x

$Controllers = App::objects('controller'); 
+2

Mise à jour pour les futurs visiteurs: si vous utilisez 2.x CakePHP, la liste peut être récupérée comme 'Contrôleurs $ = App :: objets ('contrôleur');'. – Fr0zenFyr

2

Parfait! Les débuts de ma solution:

$human_controllers = Configure::listObjects('controller'); 
$u_controllers = array(); 
foreach($human_controllers as $c){ 
    $u_controllers[] = Inflector::underscore($c); // converts "PageContents" to "page_contents" 
} 
debug($u_controllers); die(); 
Questions connexes