【问题标题】:Routing search engine friendly URLs for PagesController in CakePHP在 CakePHP 中为 PagesController 路由搜索引擎友好的 URL
【发布时间】:2011-09-17 07:02:02
【问题描述】:

我正在尝试为页面控制器创建搜索引擎友好的 URL,即 /about 而不是 /pages/about

我尝试设置以下路由(在 routes.php 的底部):

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

Router::connect('/:page', array('controller' => 'pages',
  'action' => 'display'), array('pass' => array('page'), 'page' => '[a-z]+'));

两者都正确匹配 /about/support 等。但是,当我有一个操作/方法对时,失败了。例如,/contact 应该路由到 PagesController->contact()。但是,上面将其路由到PagesController->display()

必须有一种方法可以在不为每个页面指定特定路径的情况下完成此操作。如何创建一条或一组路线:

  • 模仿默认路由行为 页面控制器。那是路线 显示(),除非一个动作/方法 对存在。
  • 通过搜索引擎友好的 URL 来实现。这是来自根 / 而不是 /pages
  • 同时演示Router::connect()Html->link()

我查看了CakePHP Book 中的示例并查看了其他问题,例如CakePHP routing in pages controller。似乎没有什么能满足上述规范。

【问题讨论】:

  • /*?除了 PagesController 之外,您还在应用程序中使用其他控制器吗?
  • 那么,如果 /xyz 应该调用 XYZController->index() 而不是 PagesController->xyz(),cake 怎么知道?这就是为什么您必须明确列出页面的原因,不是吗?
  • @webbiedave,我知道你要去哪里了。但是必须有某种方法来完成我上面概述的路线。显然我是说/* 不是答案。

标签: php cakephp url-routing


【解决方案1】:

您需要为联系方法调用创建第二条路由,并将其放在更通用的规则之前以匹配“/pages 之后的所有内容 [a-z]”。在你的规则之前尝试一下:

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

请始终牢记,路线的顺序很重要。规则越通用,匹配的越多。因此,将更具体的规则放在更通用的规则之前。

【讨论】:

  • 谢谢,但您错过了规范。我知道我可以手动制定规则以映射到每个页面。我试图通过动态规则来避免这种情况。
猜你喜欢
  • 2011-08-31
  • 2021-06-12
  • 2013-10-16
  • 2014-11-09
  • 2017-04-13
  • 2012-06-18
  • 2010-12-11
  • 1970-01-01
  • 2011-12-24
相关资源
最近更新 更多