1

CakePHP 2.3.5 を使用して RESTful サービスを作成しようとしています。これまでのところ、作業中のリソースの GET 関数を正常に作成できました。example.com/areas.jsonまたはにGET リクエストを送信するexample.com/areas/1.jsonと、データベース内のデータが返されます。

ただし、編集機能を機能させようとし始めました。からの受信データを単純に保存する単純な編集メソッドを作成しました$this->request->data。Postman を使用して機能をテストし、生の JSON を PUT または POST 経由で送信example.com/areas/1.jsonして、データを保存できなかったというメッセージを返します。メソッドが失敗したときに詳細情報を送信するようにしまし$this->request->data$this->data

この問題または同様の問題の解決策をインターネットで検索してきましたが、これまで試したことはすべて失敗に終わりました。CSRFチェックの無効化、SecurityComponentの完全な無効化、およびセキュリティに関連する他の複数の修正を試みました。それらのいずれかを変更すると、リクエストがブラックホール化されました。

CakePHP が JSON データをリクエストに受け入れるようにするには、他に何を試みることができるかについて考えている人はいますか? 役立つ場合に備えて、編集機能を以下に含めます。

public function edit($id)
{
    $this->Area->id = $id;
    $message['request-data'] = $this->request->data;
    if ($this->Area->save($this->request->data)) {
        $message['response'] = $this->Area->findById($id);
    } else {
        $message['response'] = "Error";
    }
    $this->set(array(
        'message' => $message,
        '_serialize' => array('message')
    ));
}
4

1 に答える 1

3

まず、リクエストの Content-Type が application/json であることを確認します。

次に、CakePHP は JSON ペイロードを自動的にデコードしません。手動で行う必要があります。マニュアルから:

// Get JSON encoded data submitted to a PUT/POST action
$data = $this->request->input('json_decode');
于 2013-05-25T02:47:43.820 に答える