传递获取值会破坏我的网址

时间:2011-11-28 20:57:51

标签: php cakephp cakephp-2.0

刚刚从1.3升级到2.0.3,我正在尝试迁移所有更改。我注意到以下一行

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

构建网址"/crm_quotes/index/15/21"。当我点击链接时,我被带到了网址:

"/crm_quotes/index/15%2F212

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

当我手动将URL编辑为正确的URL时:

"/crm_quotes/index/15/21"

页面加载。

有人可以开导我吗?我应该使用url功能而不是链接吗?

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

2 个答案:

答案 0 :(得分:0)

将额外的参数传递给正确的(蛋糕)方式。 Cake会对未明确设置的URL中的任何/进行编码;我还没有找到如何防止这种情况。

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

答案 1 :(得分: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的答案。