【问题标题】:Passing get values mangles my urls传递获取值会破坏我的网址
【发布时间】:2023-03-20 20:55:01
【问题描述】:

刚从 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/21"。当我点击链接时,我被带到 url:

"/crm_quotes/index/15%2F212

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

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

"/crm_quotes/index/15/21"

页面加载。

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

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

【问题讨论】:

    标签: php cakephp cakephp-2.0


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      作为您问题的答案:只需将连接的“/”取出并将 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 的答案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-23
        • 1970-01-01
        • 2018-12-17
        • 2021-08-17
        • 1970-01-01
        相关资源
        最近更新 更多