【问题标题】:CakePHP - Route configurationCakePHP - 路由配置
【发布时间】:2010-04-29 17:03:22
【问题描述】:

我正在研究 cakephp,完全是 php/cakephp 的新手。 你能告诉我这里的路由配置有什么问题吗?

Router::connect(
 '/news/:q/:page',
 array('controller' => 'news', 
       'action' => 'onDemand',
       'mode'=>'news',
       'page'=>1),
 array('pass'=>array('q','mode','page'),
       'page' => '[\d]+'));

当我以 /news/123 或 /news/123/1 访问页面时,它会尝试在新闻控制器中查找操作“123”。

基本上我想做的就是如果用户输入 /news/android ,我想捕获“android”来查询并返回结果。如果结果太多,需要支持分页,即url变成/news/android/(2...n)。

【问题讨论】:

标签: php cakephp


【解决方案1】:

你可以这样做:

Router::connect('/news/*', array('controller' => 'news', 'action' => 'onDemand'));

将您的 onDemand 函数声明为:

public function onDemand($subject, $page = null)

当用户请求/news/android/news/android/2 cake 将分别调用onDemand('android')onDemand('android', '2')

【讨论】:

  • 谢谢。我以前有过,但这破坏了我另一个定义的 URL /news/recent/*。对不起,我应该在我原来的问题中提到这一点。所以基本上如果用户输入 /news/recent/1 ,它应该转到 action=index 如果用户输入 /news/ - 应该指向 action 'onDemand' 我现在正在玩配置。我希望优先级的概念适用于路线。谢谢
  • 好的。我认为这行得通。我的路线首先是 /news/recent,它映射到 action=index,然后是 /news/*。我可以看到我的两个链接都在工作。这里有cmets吗?
  • 有趣。不过,这对我来说不太适用。我必须让 onDemand 做if ($subject == 'recent') $this->recent(); 但如果它对你有用,那就太好了!
  • 嗯,到目前为止没有问题。我进行了测试,一切似乎都处于活动状态,没有死网址。想知道我是否在其他地方做错了什么。非常感谢您的帮助。
  • 没问题。记得正式接受答案。很高兴能提供帮助。
猜你喜欢
  • 1970-01-01
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
  • 1970-01-01
  • 1970-01-01
  • 2012-02-16
  • 2014-01-01
相关资源
最近更新 更多