【问题标题】:Named parameters being passed as part of the url because of slashes由于斜杠,命名参数作为 url 的一部分传递
【发布时间】:2013-01-15 07:39:43
【问题描述】:

我正在使用cakephp 1.3,我想搜索包含 / 字符串的记录。 我已经传递了如下参数。 搜索参数如下。

Array
(
    [controller] => indents
    [action] => admin_index
    [named] => Array
        (
            [pr_no_data] => pr
        )

    [pass] => Array
        (
            [0] => no
            [1] => dip
            [2] => 002
        )

    [prefix] => admin
    [admin] => 1
    [plugin] => 
    [form] => Array
        (
        )

    [url] => Array
        (
            [url] => admin/indents/index/pr_no_data:pr/no/dip/002
        )

    [isAjax] => 
)

你们都可以看到我的 url 参数包含 admin/indents/index/pr_no_data:pr/no/dip/002,现在我想搜索 url 中定义的 pr_no。 我怎样才能做到这一点。? 因为搜索/记录传递值作为传递参数。 请帮帮我。

非常感谢。

【问题讨论】:

    标签: php search cakephp-1.3 slash


    【解决方案1】:

    正如您在数组中看到的,CakePHP 将部分数据视为传递的参数。在pr_no_data 命名变量中,您会看到它引用pr 作为它的值。

    [named] => Array
       (
           [pr_no_data] => pr
       )
    

    但是,由于斜线,数据中剩余的字符串被识别为传递参数。所以它将它们作为 URL 的一部分读取,而不是 pr_no_data 变量。

     [pass] => Array
        (
            [0] => no
            [1] => dip
            [2] => 002
        )
    

    您需要查看的是在将变量添加到 URL 之前如何生成该变量。也许您可以将其更改为管道 |分隔列表或逗号分隔列表,因此它不会干扰 URL 和混淆 cakephp。

    pr|no|dip|002
    pr,no,dip,002
    

    一旦 cakephp 收到数据,如果需要,您可以将它们转换回斜线:

    $passed = preg_replace('/,/', '/', $this->params['named']['pr_no_data']);
    

    【讨论】:

      【解决方案2】:

      尝试使用urlencode对命名参数值进行编码。

      网址应该是

      admin/indents/index/pr_no_data:pr%2Fno%2Fdip%2F002
      

      如果您使用 Html 帮助程序创建 URL,那么 CakePHP 应该为您编码值。

      echo $this->Html->url(array(
          'prefix'=>'admin',
          'controller'=>'indents',
          'action'=>'index',
          'pr_no_data'=>'pr/no/dip/002'
      ));
      

      【讨论】:

      • 我正在通过表单提交搜索记录,所以它的文本框值..所以我该怎么做...因为我已经尝试过 urlencode 它显示给我 404
      • 我假设这个 URL 是表单的操作。那个动作属性是怎么设置的?
      猜你喜欢
      • 1970-01-01
      • 2011-03-09
      • 2016-10-04
      • 1970-01-01
      • 2017-05-04
      • 2015-05-18
      • 2014-05-10
      • 2015-09-07
      • 2017-01-05
      相关资源
      最近更新 更多