【发布时间】:2014-03-12 17:44:47
【问题描述】:
我在尝试将参数传递给 CakePHP 中控制器的另一个函数时遇到问题。
首先,我在控制器函数 ($this->request->data[...]) 中从视图中的表单的文本区域收集一个字段。一旦我有了这个参数(字符串),我想将它传递给同一个控制器中的另一个函数。没问题,我使用重定向并将参数作为$this->redirect(array('action' => 'function2', 'param1'=>$data1, 'param2'=>$data2... 传递并在function2 和$this->passedArgs 中获取它。
当字符串参数(从 textarea 收集)内部有换行符(回车)时,问题就出现了。似乎 CakePHP 不接受像 myproject/function2/param1:hi**%0D%0A**bye/param2:... 这样的 URL 路由——我的意思是其中包含特殊的十六进制字符,比如 %0D%0A(换行符)。
所以,问题是:当这些参数包含回车等特殊的十六进制字符时,有什么方法可以传递这些参数?
我认为也可以像通过?param1=data1 获取参数一样传递它——我已经对其进行了测试并且它可以工作,但我认为将参数传递给函数而不是通过GET 传递更优雅。
【问题讨论】:
-
不要在 2.x 中使用命名参数,使用查询字符串。请参阅here 为什么。
-
@mark 哇!那个博客里的解释太酷了!正是我想要的,知道为什么不能传递带有特殊字符的命名参数(“命名参数的编码可以破坏 url。”)以及改用什么。似乎我不是唯一一个有问题的人:D。它还说命名参数将在下一个版本的 CakePHP 中过时,因此我将不得不更改此参数出现在查询字符串的位置。这些只是 GET 参数,只是 Cake 以“标准化”的方式管理它们,不是吗?让他们成为
$this->request->query等等。非常感谢,你帮了我很多。(写它作为投票的答案)。
标签: php cakephp parameter-passing