由于斜杠,命名参数作为url的一部分传递

时间:2013-01-15 07:39:44

标签: php search cakephp-1.3 slash

我正在使用cakephp 1.3,我想搜索包含/ in string的记录。 我已经通过参数如下。 搜索参数如下。

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 params包含admin/indents/index/pr_no_data:pr/no/dip/002,现在我想搜索url中定义的pr_no。 我怎样才能做到这一点。? 因为搜索/记录传递值作为传递参数。 请帮帮我。

非常感谢。

2 个答案:

答案 0 :(得分: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']);

答案 1 :(得分:0)

尝试使用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'
));