2013-05-11 83 views
1

我正在使用CakePHP作为我的一个项目。当我设计的网址,我知道的CakePHP做得很好,当我使用CakePHP自定义路由器URL顺序

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

CakePHP就会产生URI /应用程序的名字/职位/编辑/ 1234。但我在想什么/appname/post/1234 /编辑比前者好。我找不到解决方法。

我已经试过

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

但CakePHP会忽略数组的顺序。

有谁知道如何实现这个URL?基本上我不想修改函数Router :: url,我需要的是在我的ctp视图文件和CakePHP中编写代码,以了解我放置的正确顺序。我怎样才能做到这一点?

顺便说一句,我正在使用CakePHP 2.3。

+0

您需要实际使用路由 - “Config/routes.php”。在线CakePHP书籍中有很多例子。 – Dave 2013-05-11 04:08:11

回答

4

这是路由的工作,更具体反向路由: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的顺序来自帖子控制器的编辑方法。在您看来,链接应当建立这样的:

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

注意额外id参数传递,我们分配了routes.php。该网址应该看起来像:

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

在我的愚见,这是从常规和SEO的角度来看被认为是不好的做法。

+0

它确实有效,但为什么它被认为是不好的做法?我正在努力定义美丽而美丽的宁静的乌里?任何建议?提前致谢。 – EthanZ 2013-05-14 16:16:19

+0

它违背了Cake的默认路由顺序,并且通过将它的id放在调用它的方法之前将它置于上下文之外,这不是一个好的宁静的uri设计,有的可能不同意。通过查看不知道域名资源的URI,我会自动假定您的编辑方法需要另一个参数。 – Dan 2013-05-14 17:01:40

+0

你是对的,/ posts/1234 /编辑可能不认为是一个很好的宁静的uri,但是如果我想在post 1234上传一些照片,是/ upload/posts/1234作为一个很好的宁静URI吗? – EthanZ 2013-05-16 09:56:09