刚刚从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的一些评论后,我决定停止命名参数,因为他暗示可能会从未来版本中删除。
答案 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的答案。