gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 22:12:57 24 4
gpt4 key购买 nike

我目前正在寻找一种解决方案来从 URL 中删除“Pages”,但不会增加 Controller 的难度。

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

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

Example Link

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

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

之所以加这两行是因为不想让URL区分大小写。

我也知道这种情况并不经常发生,一旦网站“完成”, Controller 就会被更改。

所以我的解决方案如下:

/*
* 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';

所以我的问题是这个解决方案是性能 killer 吗?如果是这样,有人知道更好的解决方案吗?

因为当我查看 CakePHP 的高级路由时,在我看来我需要一个 super 高级路由...或者我根本不理解它。

CAKEPHP 2.1 版

感谢您的帮助!

最佳答案

你的方法基本上是正确的,没有神奇的开关可以解决这个问题。我写了一个article about this kind of routing不久前,它适用于较早的蛋糕版本,但仍然与微小的变化相关(我希望)。

关于php - 路由器配置 CakePHP 删除 URL 中的页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10456227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com