CakePHP在URL中隐藏动作名称,同时传递参数

时间:2012-12-15 13:34:38

标签: php cakephp cakephp-2.0 url-routing

我有这样的结构:

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

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

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

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

有可能吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

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

上面发布的

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

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

执行此操作您还可以指定要传递给控制器​​的something,它将以$this->request->something

的形式提供