2014-03-12 16 views
0

當嘗試將參數傳遞給CakePHP中的控制器的另一個函數時出現問題。如何通過CakePHP中的passedArgs傳遞迴車

首先,我收集場從視圖形式的文本區域,在控制器功能($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傳遞。

+0

不要在2.x中使用命名參數,請使用查詢字符串。看[這裏](http://www.dereuromark.de/2013/05/04/passed-named-or-query-string-params/)爲什麼。 – mark

+0

@mark哇!在那個博客中很酷的解釋!正是我想要的,知道爲什麼不能傳遞具有特殊字符的命名參數(「命名參數的編碼可以打破URL」)以及改爲使用什麼。似乎我不是唯一一個有這個問題的人:D。另外它還說在CakePHP的下一個版本中,named params將會過時,所以我將不得不改變這個參數出現的位置來查詢字符串。這些只是GET參數,只有Cake以「標準化」的方式管理它們,不是嗎?獲取它們作爲'$ this-> request-> query'等等。非常感謝你,你幫了我很大的忙(把它寫成投票的答案)。 –

回答

1

正如評論上面提到它勸不要在CakePHP2.x再使用名爲PARAMS。他們是一個錯誤的實施。 使用查詢字符串代替它將解決編碼周圍的所有問題。

此外,查詢字符串是CakePHP中的未來版本的路要走,在升級附加這樣的痛苦是可以避免的,如果一個人不再使用過時的功能。

詳情請參閱this article

+0

正如我所說,非常感謝!這幫助了我很多,並且我解決了我的問題。 –

0

\n的換行符 - \r爲回車---

這應該解決您的問題,但要注意,這些需要在雙引號才能工作。

+0

謝謝你的回答,但我認爲最好是遷移到「查詢字符串」而不是命名參數,就像@mark說的那樣。無論如何謝謝隊友! –