Cakephp 控制器别名无法完全工作



我有一个与这个问题相关的新问题,但由于问题根本不匹配,我正在创建这个新主题。但它是作为很好的参考。


我改变了对logs的想法,log的事情,logs很好。但是我有另一个叫做WikisController的控制器,在这种情况下,我真的很想更改 URL。我只是讨厌URL会被example.com/wikis/subject.html,我希望它是example.com/wiki/subject.html的。它更干净,该约定现在与其他站点 100% 匹配,也称为wiki,而不是wikis.但是,我希望控制器被称为WikisController,因为CakePHP约定。

好吧,现在真正的问题来了。我目前正在Config/routes.php使用以下路由:

Router::connect('/wiki/:action/*', array('controller' => 'wikis'));
Router::connect('/wiki/*', array('controller' => 'wikis'));

这是其他主题中的解决方案使用的代码段。但现在我遇到了一点麻烦。好吧,这不是一个大问题,因为一切都很好。但我不喜欢这个网址。

当我从example.com/wiki/edit.html创建如下链接时:

echo $this->Html->link('Wiki overview', array(
'controller' => 'wikis',
'action' => 'index',
'ext' => 'html'
));

它正在创建一个链接,example.com/wiki/index.html完全没问题并且可以工作,但我不想显示index.html,我只是不想。这是 url 中额外的单词,用户无需了解他在哪里。

我正在使用controlleraction密钥创建link,因为我之前遇到了一个小错误。当我没有指定action时,它会创建一个指向example.com/edit.html的链接,显然我不想要。所以我必须将action => index键添加到数组中。我不确定这是否是一个真正的错误,但这应该无关紧要。Index = index,没有什么能改变这一点。我确定我的 URL 指向正确的页面是一件好事,因此添加action对我来说不是问题。

只是为了引起注意:

当我以与上面完全相同的方式创建链接以从页面example.com/flights/index.htmlexample.com/flights/add.html它会从 url 中删除/index部分,只需创建一个 url 即可example.com/flights.html这更干净。

所以它必须与路由有关,但我无法弄清楚是什么。

如果我理解正确,那么您将需要一条将/wiki连接到控制器index操作的路由:

Router::connect('/wiki', array('controller' => 'wikis', 'action' => 'index'));
Router::connect('/wiki/:action/*', array('controller' => 'wikis'));
...

最新更新