CodeIgniter を使用して RESTful アプリケーションに取り組んでいますが、コントローラーで POST された json データにアクセスできません。
アプリがリモートサーバーで開発されている間、ローカルマシンでcURL経由でjsonを投稿しています。
問題のコントローラーコードは次のとおりです。
class Products extends CI_Controller
{
public function __construct()
{
$this->load->model(products_model);
}
public function index($id = FALSE)
{
if($_SERVER['REQUEST_METHOD'] == 'GET')
{
// fetch product data
$product_data = $this->products_model->get_products($id)
// set appropriate header, output json
$this->output
->set_content_type(application/json)
->set_output(json_encode($product_data));
}
elseif($_SERVER['REQUEST_METHOD'] == 'POST')
{
// debugging for now, just dump the post data
var_dump($this->input->post());
}
}
}
GET アクションは十分に機能しており、ブラウザーから要求されたとき、または cURL 要求を介して適切なデータを返します。ただし、cURL 経由で json データを POST しようとするbool(FALSE)
と、インデックス関数の POST セクションから一貫して返されます。私が作っているcURLリクエストは次のとおりです。
curl -X POST -d @product.json mydomain.com/restfulservice/products
また、product.json ファイルの内容は次のとおりです。
{"id":"240",
"name":"4 x 6 Print",
"cost":"1.5900",
"minResolution":401,
"unitOfMeasure":"in",
"dimX":0,
"dimY":0,
"height":4,
"width":6}
json データを除外し、次のようなものを渡す、cURL 経由で別の POST を作成しました。
curl -X POST -d '&this=that' mydomain.com/restfulservice/products
どちらが返されますか
array(1) {
["this"]=>
string(4) "that"
}
何を与える?jsonで何か?有効です。form_open()
CI を使用する必要があり、CIがないと正しく動作しないことを理解しているため、application/config/config.php でグローバル CSRF と XSS をオフにしました。からパラメーターを除外する$this->input->post()
と、すべての投稿アイテムが返されることを理解していますが、引き続き何も取得しません。$_POST
また、CI の入力ライブラリを調べて、PHP の変数を介してデータにアクセスしようとしましたが、違いはありませんでした。