【问题标题】:Reverse Routing /:controller/:id反向路由/:controller/:id
【发布时间】:2012-06-03 14:35:57
【问题描述】:

保持简短和甜蜜:我可以很容易地在 routes.php 中指定类似以下内容并使所需形式的 url 工作:

Router::connect('/:controller/:id',
    array('action'=>'item'),
    array('id'=>'[0-9]+')
);

但是,Cake 仍然将路由生成为 '/:controller/item/:id'。有没有一种简单的方法可以让 Cake 的反向路由在不包含操作的情况下生成 url?还是我只需要通过我的应用程序并手动将相关数组替换为“/:controller/$id”?

【问题讨论】:

  • 你能举一些你试图扭转但不起作用的例子吗?它首先是否正确路由?我觉得这一切都很好。
  • 这种数组传递给 Html->link: array('controller'=>':controller', 'action'=>'item', $id) 似乎给了我一个链接/控制器/项目/$id。我不知道这是否是预期的,我只是太努力了 - /controller/$id 表单中的路由确实有效。我确实找到了一个可能的解决方案,我将在下面发布,但是任何真正了解 Cake 路由如何工作的人仍然可以随时启发我,我应该如何 做这种事情!跨度>
  • array('controller'=>'videos', 'action'=>'item', $id) 应该匹配并变成/videos/$id。您是否尝试在您的 HTML 链接中使用 :controller,因为这不起作用。创建链接时仍然需要定义控制器。反向路由正在将/videos/$id 更改为array('controller'=>'videos', 'action'=>'item', $id),这也应该可以工作。
  • 我会玩一玩,让你知道会发生什么!谢谢!
  • @jeremyharris 这不好,如果没有“/item/”出现在中间,我似乎无法生成网址!或许我应该硬着头皮去调查 Cake 代码,我显然需要为我揭开神秘的路线秘密......

标签: cakephp routing cakephp-2.0


【解决方案1】:

这是我的问题的一个可能的解决方案 - 如果我指定这样的路线:

Router::connect('/videos/*',
    array('controller'=>'videos', 'action'=>'item'),
    array('pass'=>array('id'))
);

它似乎确实将其反向路由回 /videos/$id。

我仍然不知道这与我最初的尝试有什么区别,以及为什么原始尝试(或在某些情况下)更难路由!因此,任何人都可以发送给我的任何 Cake 路由专业知识仍然非常受欢迎。

【讨论】:

  • 你,我的男人,做得对,不需要专家。作为this book example explains,这就是要走的路。关于站点范围链接更改的小建议 - 如果您想更改创建链接的方式,您可能需要覆盖主要的 AppHelper::link 或 AppHelper::url 方法。您的原始路线可能不起作用,因为您的 /:controller/:id 是在核心的 /:controller/:action/:id 之后定义的 - 第一个优先。
猜你喜欢
  • 1970-01-01
  • 2020-07-13
  • 1970-01-01
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
相关资源
最近更新 更多