2011-11-28 32 views
0

刚刚从1.3升级到2.0.3,我试图迁移所有更改。我注意到以下行通过获取值损坏我的网址

echo $this->Html->link('Quote', array('controller'=>'crm_quotes', 'action'=>'index', $lead['id'].'/'.$crmContact['CrmContact']['id']), null); 

建立url。当我点击我转到了网址链接:

"/crm_quotes/index/15%2F212 

所以它与HTML #替换字符,但它最终打破了链接。

当我手动编辑URL到正确的:

"/crm_quotes/index/15/21" 

页面加载。

有人能够启发我吗?我应该使用url函数而不是链接?

我有很多页面需要在url中传递多个参数。我使用的是命名参数,但在阅读Mark Story的一些评论后,我决定停止命名参数,因为他暗示可能会从未来的版本中删除。

回答

0

将额外参数传递给正确的(蛋糕)方式。 Cake在没有专门设置的URL中编码任何/;我还没有发现如何防止这一点呢。

echo $this->Html->link('Quote', array('controller'=>'crm_quotes', 
           'action'=>'index', 
           $lead['id'], 
           $crmContact['CrmContact']['id']), null); 
0

作为您的问题的答案:只需要连接的'/'出并传递ID作为单独的值在该数组中。它应该自动在它们之间放置正斜杠。

echo $this->Html->link('Quote', array(
    'controller'=>'crm_quotes', 
    'action'=>'index', 
    $lead['id'], 
    $crmContact['CrmContact']['id'] 
)); 

在编码的话题:我觉得这里的问题是,它不知道你打算为/待处理的URL,而不是只是一些文本的有效组成部分。默认行为是编码保留字符以避免这个问题,所以它得到了URL编码。

这是similar question,以及关于URL encoding in general的回答。