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

时间:2012-05-04 21:14:34

标签: php cakephp router cakephp-2.1 clean-urls

我目前正在寻找一种从网址中删除“网页”的解决方案,但不会让添加控制器变得困难。

我环顾四周,在Google上寻找解决方案,但他们能给出的最佳解决方案是:

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

Example Link

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

Router::Connect('/Users/:action/, array('controller' => 'Users');
Router::Connect('/users/:action/, array('controller' => 'Users');

我添加这两行的原因是因为我不希望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查看高级路由时,在我看来,我需要一个SUPER高级路由......或者我根本就不理解它。

CAKEPHP版本2.1

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

你的方法基本上是正确的,没有神奇的开关可以解决这个问题。我刚才写了article about this kind of routing,这是早期的蛋糕版本,但仍然与微小的变化有关(我希望)。