【问题标题】:CakePHP customize Router URL orderCakePHP 自定义 Router URL 顺序
【发布时间】:2013-05-19 00:21:56
【问题描述】:

我在我的一个项目中使用 CakePHP。当我在设计 URL 时,我知道 CakePHP 在我使用时做得很好

$this->Html->Link('Add Post', array('controller'=>'posts', 'action'=>'edit', 1234))

CakePHP 将生成 URI /appname/posts/edit/1234。但是我在想 /appname/post/1234/edit 比前者更好。我找不到解决方法。

我试过了

$this->Html->Link('Add Post', array('controller'=>'posts', 1234, 'action'=>'edit'))

但是 CakePHP 会忽略数组的顺序。

有谁知道如何实现这个网址?基本上我不想修改函数Router::url,我需要在我的ctp视图文件和CakePHP中编写代码来知道我放的正确顺序。我该怎么做?

顺便说一句,我使用的是 CakePHP 2.3。

【问题讨论】:

  • 您需要实际使用路由 - Config/routes.php。网上的 CakePHP 书中有很多例子。

标签: cakephp cakephp-2.3


【解决方案1】:

这是一个路由工作,更具体地说是反向路由:http://book.cakephp.org/2.0/en/development/routing.html

app/Config/routes.php 中,您可以添加以下内容:

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

在这里,您通过定义pre-route named parameters 的顺序来告诉Cake 反向路由来自posts 控制器的edit 方法的任何请求。在您看来,链接应该这样构建:

echo $this->Html->link('Add Post', array(
    'controller' => 'posts',
    'action' => 'edit',
    'id' => 1234
));

注意我们在routes.php 中分配的额外id 参数。网址应如下所示:

http://appdomain.com/posts/1234/edit

以我的拙见,从传统和 SEO 的角度来看,这都被认为是不好的做法。

【讨论】:

  • 它确实有效,但为什么它被认为是不好的做法?我正在努力定义美好而美丽的宁静 uri?有什么建议吗?提前致谢。
  • 它违反了 Cake 的默认路由顺序,并且您将帖子的 id 放在调用它的方法之前,从而使帖子脱离了上下文,这不是好的宁静 uri 设计,有些人可能不同意。通过在不了解域资源的情况下查看 uri,我会自动假设您的编辑方法需要另一个参数。
  • 你说得对,/posts/1234/edit 可能不是一个很好的restful uri,但是如果我想在post 1234 上上传一些照片,/upload/posts/1234 是一个很好的restful URI?
  • 是的,Cake 的默认路由顺序不会出错,祝你好运!
猜你喜欢
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 2015-10-12
  • 1970-01-01
相关资源
最近更新 更多