2014-02-18 28 views
1

我在使用Laravel框架在php中創建Web服務時遇到問題。Laravel PHP - 使用GET方法發送JSON對象

我有以下URL來調用:

http://localhost:100/cust/server.php/InitialSync/{"IdCard": "lxpIu1bD4UX4W2h5EM+i6VEQUZk+i\/SJF1DU6179HBejWkOBENSflnTSN\/8N14OGTqh6fH\/6kNrjJCilCMIrVtrlUAyQ5y8zZXVy5K3XwMOGmlHghAe80Q=="} 

所以你看,我送一個JSON對象與加密後IdCard到服務器。 我的路線看起來像這樣:

Route::get('InitialSync/{idCard}, '[email protected]'}; 

所以問題是,這種不需額外的工作。我認爲問題是JsonObject中的/。

有沒有人知道我能如何解決這個問題。

從Laravel結果是:

Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException 

我認爲他試圖找到的路線,但在becouse JSON對象的/我得到這個錯誤。

+0

[需要允許在Apache上編碼的斜線](http:// stackoverflow。COM /問題/ 4390436 /需要到允許編碼的斜槓上的Apache) –

+0

返回什麼樣的錯誤?你的網址很奇怪。你爲什麼使用端口100?什麼是客戶之路? 什麼是** server.php **文件? – carousel

+0

所以,你認爲這是一個與Apache的問題? – Alex

回答

3

不幸的是Laravel無法通過Javascript您已瞭解瀏覽器將有麻煩來處理JSON通過GET發送的,即使你編碼和字符串化它:

encodeURIComponent(
    JSON.stringify(
    {"IdCard": "lxpIu1bD4UX4W2h5EM+i6VEQUZk+i\/SJF1DU6179HBejWkOBENSflnTSN\/8N14OGTqh6fH\/6kNrjJCilCMIrVtrlUAyQ5y8zZXVy5K3XwMOGmlHghAe80Q=="} 
) 
) 

至極生成字符串:

"%7B%22IdCard%22%3A%22lxpIu1bD4UX4W2h5EM%2Bi6VEQUZk%2Bi%2FSJF1DU6179HBejWkOBENSflnTSN%2F8N14OGTqh6fH%2F6kNrjJCilCMIrVtrlUAyQ5y8zZXVy5K3XwMOGmlHghAe80Q%3D%3D%22%7D" 

Laravel仍然需要識別該URL中的路由。 這不起作用

問題的根源在於字符串中存在轉義字符\/所以,你有一些選擇

1)通過POST

2發送)Base64編碼,IdCard和解碼是早在Laravel。

3)用別的東西替換這些字符並在Laravel中恢復它。

4)在Laravel的Github回購中填寫一個bug並等待他們修復它。

+0

好吧,我現在想你的解決方案,我有同樣的問題,我得到錯誤404。我的問題是,我發送一個加密後的字符串(AES)和我的Laravel路由必須接受。 – Alex

+0

我的解決方案?我沒有給出解決方案,我給了你3個選項,這些都不是解決方案。在我顯示的代碼之後,我說'Laravel將仍然需要識別該URL中的路由「,這意味着即使這樣做也不會起作用。 –

+0

好的......這意味着,我沒有改變來處理這個Get Request。所以唯一的解決辦法是做一個貼子而不是Get。你同意嗎? – Alex

0

你可以做這樣的事情:

class MyController extends BaseController { 

    public function readJson() { 
     dd(request()->segments()); 
    } 
} 

應打印該請求的所有部分:在您的控制器

Route::get('/readjson/{json}', '[email protected]'); 

2):你的路由器上

1) URI,包括作爲JSON字符串發送的參數

3)然後,只需將segments()替換爲段(n)得到確切的一個。在這種情況下應該是2,如果你使用api路由(routes/api.php),應該是3。從那裏你可以使用json_decode或其他任何東西來解碼JSON字符串。