2016-04-26 63 views
3

通過HTTP PUT我發送以下JSON到我的web服務,通​​過return new Response($request->getContent());驗證:訪問HTTP PUT數據

{"company_id":13} 

在我的web服務,我想通過它的標籤從請求檢索數據:

var_dump("COMPANY ID ".$request->request->getInt('company_id')); //returns 0 

我也試過:

//the 2 below should only work on GET from what I read 
var_dump("COMPANY ID ".$request->get('company_id')); //returns nothing 
var_dump("COMPANY ID ".$request->query->getInt('company_id')); //returns 0 

的Symfony2的書中只提到如何獲得數據F rom GET和POST,我如何從PUT請求中檢索數據?

回答

5

你從$request->getContent()得到它,只是json_decode它,你應該得到一個對象,所以你可以訪問它。例如:

$data = json_decode($request->getContent()); 
var_dump("COMPANY ID " . $data->company_id); 

編輯增加一點點解釋。

的Symfony的Http基礎get方法基本上只是一個「別名」爲$request->attributes->get$request->query->get$request->request->get,所以如果一個返回0或假,或什麼的,挺可能對方就會了。

由於HTTP PUT以body身份發送數據,所以Request對象不會嘗試以任何方式對其進行解碼,因爲它可能具有多種不同格式(JSON,XML,非標準...)。如果您希望通過get方法調用訪問它,則必須手動將其解碼,然後將其添加到其requestquery屬性中。

+0

哇,這是相當直觀的,但它的作品。一旦冷卻時間消失,拯救生命的人會立即接受答案。 $數據是什麼類型的對象? symfony2是否有解碼json的某種特殊對象?我現在明白,http內容被視爲單個字符串。 –

+0

不,'json_decode'會返回一個標準對象,或者你可以讓它返回一個數組。請參閱http://php.net/json_decode – slax0r

+0

我想知道如果我想使用更復雜的json。例如'$ data-> company-> employees-> 43;'或者我應該把它當作一個多維數組嗎?我會讀一讀stdObject是什麼。 –

1

你永遠不會把它作爲一個參數,因爲它不是一個參數。這是一個原始內容,你必須自己解碼。

HTTP協議不知道任何關於JSON/XML /序列化/不管。

它只看到一個文本字符串。

正如@slaxOr所說,你必須從請求中獲取並自己解碼(可能有捆綁包會爲你做,但我不知道它們)。