路由器配置CakePHP删除URL中的页面

路由器配置CakePHP删除URL中的页面,php,cakephp,router,cakephp-2.1,clean-urls,Php,Cakephp,Router,Cakephp 2.1,Clean Urls,我目前正在寻找一种解决方案,从URL中删除“页面”,但不使添加控制器变得困难 我环顾四周,在谷歌上搜索解决方案,但他们能给出的最佳解决方案是: Router::Connect('/*', array('controller' => 'pages', 'action' => 'display')); 但是这个解决方案的问题是,每次我想添加控制器时,我都需要在config/routers.php文件中添加以下行 我之所以添加这两行,是因为我不希望URL区分大小写 我也知道,一旦网站“

我目前正在寻找一种解决方案,从URL中删除“页面”,但不使添加控制器变得困难

我环顾四周,在谷歌上搜索解决方案,但他们能给出的最佳解决方案是:

Router::Connect('/*', array('controller' => 'pages', 'action' => 'display'));

但是这个解决方案的问题是,每次我想添加控制器时,我都需要在config/routers.php文件中添加以下行

我之所以添加这两行,是因为我不希望URL区分大小写

我也知道,一旦网站“完成”,控制器被更换的情况并不经常发生

因此,我的解决方案如下:

/*
 * Get URL
 * Seperate in array
 * Remove empty elements
 */
$url = array_filter(explode("/", Router::url()));

/*
 * Get Controllers list
 */
$Controllers = App::objects('controller');
$CleanControllers = array();

/*
 * Remove string 'Controller' from element
 * lower string
 */
foreach($Controllers as $Controller) {
    $CleanControllers[] = strtolower(str_replace('Controller', '', $Controller));
}

/*
 * Check if first element, from URL, is NOT a controllers array
 */
if(!in_array(strtolower(reset($url)), $CleanControllers)) {
    /*
     * Forward to "Pages" controller 
     */
    Router::connect('/', array('controller' => 'Pages', 'action' => 'display', 'home'));
    Router::connect('/*', array('controller' => 'Pages', 'action' => 'display'));
}

/*
 * Check if first element, from URL, is NOT a controllers array
 */

CakePlugin::routes();

require CAKE . 'Config' . DS . 'routes.php';
所以我的问题是,这个解决方案是性能杀手吗?如果是,有谁知道更好的解决方案吗

因为当我从CakePHP查看高级路由时,我觉得我需要一个超级高级路由。。。或者我就是不明白

CAKEPHP版本2.1


谢谢你的帮助

您的方法基本正确,没有解决此问题的神奇开关。我不久前写的,这是早期的蛋糕版本,但仍然与小改动有关(我希望如此)

/*
 * Get URL
 * Seperate in array
 * Remove empty elements
 */
$url = array_filter(explode("/", Router::url()));

/*
 * Get Controllers list
 */
$Controllers = App::objects('controller');
$CleanControllers = array();

/*
 * Remove string 'Controller' from element
 * lower string
 */
foreach($Controllers as $Controller) {
    $CleanControllers[] = strtolower(str_replace('Controller', '', $Controller));
}

/*
 * Check if first element, from URL, is NOT a controllers array
 */
if(!in_array(strtolower(reset($url)), $CleanControllers)) {
    /*
     * Forward to "Pages" controller 
     */
    Router::connect('/', array('controller' => 'Pages', 'action' => 'display', 'home'));
    Router::connect('/*', array('controller' => 'Pages', 'action' => 'display'));
}

/*
 * Check if first element, from URL, is NOT a controllers array
 */

CakePlugin::routes();

require CAKE . 'Config' . DS . 'routes.php';