我正在为客户建立一个CakePHP网站,我有一个有趣的问题。他们希望添加一项新功能,用户可以使用此类网址在网站中创建自己的目标网页:http://mainsite.com/username
。由于这是一个Cake站点,username
有很多值会导致各种路由疯狂,特别是如果他们碰巧选择了与站点内控制器相同的用户名。
我的方法是这样的:在Users控制器的beforeValidate
函数中,根据所有控制器名称的列表检查提供的用户名,如果匹配则返回false
。我的问题是 - 如何获得所有控制器名称的列表(实际上不是/app/controllers
中的文件循环)?甚至可以这样做吗?
谢谢!
答案 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();