2012-09-11 22 views
7

我有一个路线,看起来像这样:如何防止控制器和动作在cakephp中出现在URL中?

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'))); 

什么不第一个匹配。在'albums'控制器的'内容'操作中,我自己负责分页 - 意思是我检索命名参数'page'。 用于第二路径URL应该是这样的: http://somesite.com/Album/foo-bar/page:2

上面的网址确实有效,但是当我尝试使用HTML助手(网址,链接)输出这样一个URL,它附加控制器和行动开始,像这样: http://somesite.com/albums/contents/Album/foo-bar/page:2

我不喜欢。 一个使用的HtmlHelper的代码是这样的:

$html->url(array('/Album/' . $album['Album']['slug'] . '/page:' . $next)) 

回答

2

请参见下面的网址是非常有助于全给你

http://book.cakephp.org/2.0/en/development/routing.html

或者阅读

传递参数动作

当使用Route元素连接路由时,您可能希望将路由元素传递给参数。通过使用路由器的第三个参数::连接()您可以定义路径要素也应当提供与传递参数:

<?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' 
)); 
+0

我被迫使用不同的解决方案。仍然标记你的答案是正确的。 – r0nny1l

相关问题