我有一条看起来像这样的路线:
Router::connect('/Album/:slug/:id',array('controller' => 'albums', 'action' => 'photo'),array('pass' => array('slug','id'),'id' => '[0-9]+'));
和另一个像这样:
Router::connect('/Album/:slug/*',array('controller' => 'albums','action' => 'contents'),array('pass' => array('slug')));
与第一个不匹配的内容。在'专辑'控制器的'内容'动作中,我自己处理分页 - 这意味着我检索命名参数'page'。 第二条路线的URL如下所示: http://somesite.com/Album/foo-bar/page:2
上面的URL确实有效,但是当我尝试使用HTML Helper(url,link)输出这样的url时,它会将控制器和动作附加到开头,如下所示: http://somesite.com/albums/contents/Album/foo-bar/page:2
我不喜欢。 使用HtmlHelper的代码是这样的:
$html->url(array('/Album/' . $album['Album']['slug'] . '/page:' . $next))
答案 0 :(得分:2)
请参阅下面的网址,这对您非常有帮助
http://book.cakephp.org/2.0/en/development/routing.html
或阅读
将参数传递给行动
使用Route元素连接路径时,您可能希望将路由元素替换为传递参数。通过使用 Router :: connect()的第3个参数,您可以定义哪些路径元素也可以作为传递参数使用:
<?php
// SomeController.php
public function view($articleId = null, $slug = null) {
// some code here...
}
// routes.php
Router::connect(
'/blog/:id-:slug', // E.g. /blog/3-CakePHP_Rocks
array('controller' => 'blog', 'action' => 'view'),
array(
// order matters since this will simply map ":id" to $articleId in your action
'pass' => array('id', 'slug'),
'id' => '[0-9]+'
)
);
现在,由于反向路由功能,您可以像下面一样传入url数组,而Cake将知道如何形成路由中定义的URL:
// view.ctp
// this will return a link to /blog/3-CakePHP_Rocks
<?php
echo $this->Html->link('CakePHP Rocks', array(
'controller' => 'blog',
'action' => 'view',
'id' => 3,
'slug' => 'CakePHP_Rocks'
));