0

我有这样的结构:

  • example.com/MyController/index/MyGoodPage/maximum/
  • example.com/MyController/index/MyBestPage/optimize/
  • example.com/MyController/index/MyFancyPage/lowprice/

但我不希望我的访问者看到“索引”这个词,因为它不会给他/她提供更多信息。我需要这样的网址:

  • example.com/MyController/MyGoodPage/maximum/
  • example.com/MyController/MyBestPage/optimize/
  • example.com/MyController/MyFancyPage/lowprice/

但是要以默认的 Cake 方式执行此操作,我需要创建单独的数百个操作来处​​理我的情况。我不想创建它们所有的动作,我需要创建一个动作,然后显示有关的相关内容request->params['pass']

是否可以?

4

2 回答 2

2

这是路由的工作:http : //book.cakephp.org/2.0/en/development/routing.html 这实际上是核心 PagesControllerdisplay方法的默认设置:

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

你可以为你的控制器做同样的事情

Router::connect('/controller_name/*', array('controller' => 'controller_name', 'action' => 'index'));
于 2012-12-15T13:53:18.570 回答
1

您已经选择了一个答案,但这里有一个更好的答案。

Router::connect('/controller_name/*', array(...)); 如上所述将匹配任何内容,因此您无法再访问/controller_name/delete或任何其他方法。

您应该选择不那么贪婪的路线,例如Router::connect('/contorller_name/:something', array(...));并指定像 [maximum|optimum|lowprice] 这样的正则表达式。

这样做,您还可以指定something要传递给控制器​​的,它将作为$this->request->something

于 2012-12-16T02:00:23.400 回答