我目前正在寻找一种从网址中删除“网页”的解决方案,但不会让添加控制器变得困难。
我环顾四周,在Google上寻找解决方案,但他们能给出的最佳解决方案是:
Router::Connect('/*', array('controller' => 'pages', 'action' => 'display'));
但是这个解决方案的问题是,每次我想添加一个控制器时,我都需要添加以下几行来管理我的 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
感谢您的帮助!
答案 0 :(得分:0)
你的方法基本上是正确的,没有神奇的开关可以解决这个问题。我刚才写了article about this kind of routing,这是早期的蛋糕版本,但仍然与微小的变化有关(我希望)。