CodeIgniter RestServer中put請求獲取不到參數的問題解決

近期用restserver遇到個蛋疼的問題,發現$this->put獲得的參數都是null。查了一下發現。這貌似這個廣泛問題,參見連接:https://github.com/chriskacerguis/codeigniter-restserver/issues/362php

仍是先來看下官方的解釋:參見 http://code.tutsplus.com/tutorials/working-with-restful-services-in-codeigniter-2--net-8814git

$this->put()

Reads in PUT arguments set in the HTTP headers or via cURL.

即該函數可以讀取經過cURL訪問時攜帶的put參數,或者在http headers裏的參數。

但是通過測試,即使參數放headers裏。$this->put()也訪問不到,其根本緣由多是在源代碼上某個地方給屏蔽了。github

雜家臨時也沒找到解決的根本方法,但下面兩種可以臨時解決這個問題:json

1。與post保持一致,仍然在body裏傳參數。restful

在基類裏寫個函數:app

    public function getPut($key){
        return $this->input->input_stream($key);
    }

client訪問的時候正常傳參數在body裏。就ok了。注意此時經過$this->post()是得不到參數的。必須從input_stream裏取。上述函數支持多字段同一時候取,如:

$data = $this->getPut(array('tel', 'name', 'addr'));
事實上CI裏從input出來的函數應該都支持多字段同一時候取,但Restserver的this->get() post()卻不支持。

補充:當把參數放body裏時。直接用$this->put()就可以得到到相應字段了,文檔說是在headers,實際是在body裏!但$this->put()不支持多字段,故上述函數仍是有意義的。函數


$this->delete()也有這個問題,讀不到headers裏的參數,但能讀到body裏的!codeigniter

!!post

2。參數在header裏傳,基類裏寫個函數:ui

    /**
     * 得到key相應的header
     * @param $key
     * @return mixed
     */
    public function getHeader($key){
        return $this->input->get_request_header($key, TRUE);
    }

我的推薦第一種哈。參數在body裏傳!

能依照http規矩來最好,header裏不要爛用。


ps:restserver裏put得到不到參數的問題跟Content-Type:application/json 這個設置無關。

------歡迎你們增長PHP CodeIgniter社區羣:460132647

相關文章
相關標籤/搜索