1

我正在使用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。我怎样才能做到这一点。?因为搜索/记录传递值作为传递参数。请帮我。

非常感谢。

4

2 回答 2

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']);
于 2013-01-16T16:44:17.397 回答
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'
));
于 2013-01-15T07:45:00.013 回答