スリムなアプリで問題が発生しました.Jsonレスポンスをカスタムヘッダーで送信します。Slim 3のレスポンスオブジェクトを外部クラス経由で変更する
のindex.php
require 'vendor/autoload.php';
require 'app/config.php';
require 'app/libs/api.cs.php';
$app = new Slim\App(
[
"settings" => $config,
"apics" => function() { return new APIHelper(); } //This is a class that contain a "helper" for api responses
]
);
require 'app/dependences.php';
require 'app/middleware.php';
require 'app/loader.php';
require 'app/routes.php';
// Run app
$app->run();
アプリ/ libsに/ api.cs.php( "ヘルパー")
<?php
class APIHelper
{
public function sendResponse($response, $status='success' ,$code = 200, $message = "", $data = null)
{
$arrResponse = array();
$arrResponse['status'] = $status;
$arrResponse['code'] = $code;
$arrResponse['message'] = $message;
$arrResponse['data'] = $data;
return $response
->withHeader('Access-Control-Allow-Origin', '*')
->withHeader('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Accept, Origin, Authorization, AeroTkn')
->withHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
->withHeader('Content-Type','application/json')
->withHeader('X-Powered-By','My API Server')
->withJson($arrResponse,$code);
}
}
私のroutesファイル(アプリ/ルート:私のコードは次のようなものです。 PHP)
$app->group('/foo', function() {
$this->get('', function ($req, $res, $args) {
return $this->apics->sendResponse($res, 'success' ,200, "Foo API Index By Get", null);
});
$this->post('', function ($req, $res, $args) {
try{
$oBody = $req->getParsedBody();
return $this->apics->sendResponse($res, 'success' ,200, "Foo API POST Response", $oBody);
}
catch(\Exception $ex){
return $this->apics->sendResponse($res, 'error' ,500, "Process Error", array('error' => $ex->getMessage()));
}
});
});
私がリクエストボディで私のアプリを実行しようとすると、結果は以下である: ヘッダ:
connection →Keep-Alive
content-type →text/html
date →Wed, 30 Aug 2017 02:22:56 GMT
keep-alive →timeout=2, max=500
server →Apache
transfer-encoding →chunked
ボディ(単純なテキストではなく、JSONエンコードされたとして戻っ)
{"status":"success","code":200,"message":"Foo API POST Response","data":{"one":"1", "two":"2"}}
私はミドルウェアとして、このクラスを置くしようとしましたが、私はこれらの対象にいくつかの混乱しています。
これらの方法が良いか悪いのかを教えてもらえますか?
ありがとうございました。私はあなたの答えをお祈りします!ミドルウェアを使用してニース日
「リクエストボディでアプリを実行しようとしているとき」と言うとどういう意味ですか?あなたのコードは私のマシンで正常に動作します。 – Nima
こんにちは@Nima。 申し訳ありませんが、私はその部分をうまく書きませんでした。アプリケーションに任意のメソッドを呼び出すと、上記の例では、要求の本文にデータを送信するいわゆるポストを使用しました。 –