如何在CakePHP中获取控制器名称列表以验证用户数据?

时间:2009-05-22 14:32:24

标签: php cakephp

我正在为客户建立一个CakePHP网站,我有一个有趣的问题。他们希望添加一项新功能,用户可以使用此类网址在网站中创建自己的目标网页:http://mainsite.com/username。由于这是一个Cake站点,username有很多值会导致各种路由疯狂,特别是如果他们碰巧选择了与站点内控制器相同的用户名。

我的方法是这样的:在Users控制器的beforeValidate函数中,根据所有控制器名称的列表检查提供的用户名,如果匹配则返回false。我的问题是 - 如何获得所有控制器名称的列表(实际上不是/app/controllers中的文件循环)?甚至可以这样做吗?

谢谢!

2 个答案:

答案 0 :(得分:6)

你可以使用 CakePHP 1.x

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

CakePHP 2.x

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

答案 1 :(得分:2)

完美!我的解决方案的开始:

$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();