CakePHP的URL中藏匿动作名称,同时传递参数(CakePHP hiding action na

2019-10-17 11:57发布

我有这样的结构:

  • example.com / myController的/索引/ MyGoodPage /最大/
  • example.com / myController的/索引/ MyBestPage /最优/
  • example.com / myController的/索引/ MyFancyPage / lowprice /

但我不希望我的观众看到“指数”二字,因为它不会给他提供任何更多信息/她。 我需要我的网址是这样的:

  • example.com / myController的/ MyGoodPage /最大/
  • example.com / myController的/ MyBestPage /最优/
  • example.com / myController的/ MyFancyPage / lowprice /

但要做到thisin默认蛋糕的方式,我需要创建的行动来处理我的情况单独hundereds。 我不想创建他们的所有行动,我需要创建一个动作,然后就显示相关内容的request->params['pass']

可能吗?

Answer 1:

这是路由工作: 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'));


Answer 2:

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

Router::connect('/controller_name/*', array(...)); 如上面贴将匹配任何东西,所以你不能再访问/controller_name/delete或任何其他方法。

你应该选择一个贪心不足途径,例如Router::connect('/contorller_name/:something', array(...)); 并指定像一个正则表达式[最大|最佳的| lowprice]例如。

这样做,你也可以指定something要传递给控制器,这将是可作为$this->request->something



文章来源: CakePHP hiding action name in URL, while passing arguments