CakePHP自定义路由器URL顺序

时间:2013-05-11 03:27:20

标签: cakephp cakephp-2.3

我正在将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中编写代码以了解我放的正确顺序。我怎么能这样做?

BTW,我正在使用CakePHP 2.3。

1 个答案:

答案 0 :(得分: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的顺序告诉Cake反向路由来自posts控制器的edit方法的任何请求。在您看来,链接应该像这样构建:

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

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

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

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