【问题标题】:How to do good custom routing with CakePHP?如何使用 CakePHP 做好自定义路由?
【发布时间】:2011-10-22 02:01:23
【问题描述】:

我打算用 CakePHP 重写我的网站,在花了整整一周的时间学习之后,我仍然不确定如何在 CakePHP 中做好自定义路由。

这就是我想要的:

  • 在 www.domain.tld/en/dragons.html 中保留当前 url 结构,或使用 www.domain.tld/en/dragons,但不使用 www.domain.tld/en/nodes/dragons.html。并且还能够在类似的路径结构上使用控制器。

整个网站大约有 100 个静态页面。我已经阅读了多语言路由,我想我可以做到。我也可以通过 PagesControler 或自写的 NodesController 制作 /en/* 或 /en/:slug 路由。

我的问题是我希望能够混合和匹配带有和不带有控制器的 url,所以实际上我想要的是它检查 :slug 是否是 slug 列表的一部分,应该仍然有选项将该网址与控制器一起使用。

我已经为 /en/contact 和 /en/:slugid 创建了路由,但似乎所有查询都路由到了我的 NodesController,即使我明确表示 /en/contact 应该路由到 ContactsController。

如何指示 Cakephp 保持我当前的字典结构?我阅读了 Cakephp 书的路由部分,但它非常短,让我有点不确定这种路由的可能性。如有必要,我将只编写一个打印所有 slug 的所有路由的 php 代码,因此我仍然可以编写具有类似路径结构的控制器路由。

【问题讨论】:

  • 贴出你目前的路线。
  • 您在为您的网站使用数据库吗?

标签: cakephp routing cakephp-1.3


【解决方案1】:

如果 webroot 中存在文件(即app/webroot/static.html),.htaccess 文件将告诉 Apache 在加载 CakePHP 框架以请求 www.example.com/static.html 之前提供该文件。

Cake 以自上而下的顺序加载路由,并将使用第一个匹配的路由来处理请求。在您的情况下,/en/contact 应该高于 /en/:slugid,否则 slugid 规则将始终获胜。

如果 CakePHP 的路由没有完成你想要的,你总是可以实现一个自定义路由类 (book / example)。

【讨论】:

    猜你喜欢
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 2011-06-29
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    相关资源
    最近更新 更多