2

CakePHP 3.0 REST API を作成しています。この指示(本のルーティング)に従い、jsonで応答を受け取りました。これが私のコードです。

01 src/config/rout.php

Router::extensions('json');

02 src/controler/UsersController.php

  public function view($id = null) {
    $data = array('status' => 'o','status_message' => 'ok' );
    $this->set('data', $data);
    $this->set('_serialize', 'data');  
}

03 この URL に投稿リクエストを送信します

http://domain.com/users/view.json

出力:

{
    "status": "o",
    "status_message": "ok"
}

しかし、 .json拡張子なしでjsonを出力したい。前もって感謝します。

4

3 に答える 3

5

私は同じ状況にありましたが、今はこれに対する解決策を見つけました。これで、.json なしでリクエスト URL を入力でき、応答で Json データも取得できるようになりました。

アプリコントローラーで、応答を処理するネットワーク応答を追加します。

Cake\Network\Response を使用します。

その後、Json入力を配列に変換する必要があるので、このgetJsonInput()関数をあなたに入れAppControllerて呼び出しますinitialize()

public function getJsonInput() {
        $data = file_get_contents("php://input");
        $this->data = (isset($data) && $data != '') ? json_decode($data, true) : array();
    }

これでコントローラーに、すべての投稿データが$this->data. すべての入力にアクセスできます。例を次に示します。

class UsersController extends AppController {

    public function index() {

        if ($this->request->is('post')) {
            //pr($this->data);    //here is your all inputs
           $this->message = 'success';
           $this->status = true;
        }
        $this->respond();
    }
}

respond()関数の最後で、で定義されているものを呼び出す必要がありますAppController

public function respond() {  
        $this->response->type('json');  // this will convert your response to json
        $this->response->body([
                    'status' => $this->status,
                    'code' => $this->code,
                    'responseData' => $this->responseData,
                    'message'=> $this->message,
                    'errors'=> $this->errors,
                ]);   // Set your response in body
        $this->response->send();  // It will send your response
        $this->response->stop();  // At the end stop the response
    }

AppControllerasですべての変数を定義する

public $status = false;
public $message = '';
public $responseData = array();
public $code = 200;
public $errors = '';

もう1つ行うことは次のとおりです。

Response.php (/vendor/cakephp/cakephp/src/Network/Response.php) You need to edit one line at 586 echo $content;to in function echo json_encode($content);. _sendContent()

それでおしまい。これで、リクエスト URL を として設定できます domain_name/project_name/users/index

于 2016-12-15T07:56:27.157 に答える
0

適切な HTTP 受け入れヘッダー を使用してデータを要求するとAccept: application/json、RequestHandler がそれを取得する必要があります。

Accept ヘッダーは、HTTP クライアントが受け入れるコンテンツ タイプをサーバーに伝えるために使用されます。次に、サーバーは応答を返します。これには、返されたコンテンツの実際のコンテンツ タイプをクライアントに伝える Content-Type ヘッダーが含まれます。

ただし、お気付きかもしれませんが、HTTP 要求には Content-Type ヘッダーも含めることができます。なんで?POST または PUT リクエストについて考えてみましょう。これらのリクエスト タイプでは、クライアントは実際にはリクエストの一部として一連のデータをサーバーに送信し、Content-Type ヘッダーはサーバーに実際のデータを伝えます (したがって、サーバーがデータを解析する方法を決定します)。

特に、HTML フォームの送信による典型的な POST リクエストの場合、リクエストの Content-Type は通常、application/x-www-form-urlencoded または multipart/form-data のいずれかになります。

于 2015-12-08T09:05:54.893 に答える