2017-06-30 4 views
1

私はPHP Slim-Framework v3を学び始めました。しかし、私はいくつかの機会にそれが難しいと思っています。SlimFramework php v3 withStatus(500)が動作しません

$app = new \Slim\App(["settings" => $config]); 
$app->get('/', function(Request $request, Response $response, $args = []) { 
    $error = array('result' => false, 'message' => 'Bad Request', 'dev'=>'', 'data' => []); 
    $response->withStatus(500)->getBody()->write(json_encode($error)); 
}); 

は、今私は私がサービスで問題を抱えている、これまでときに、ユーザーに対してステータス500で応答します:

は、ここに私のコードです。しかし、残念ながら、これは動作していません。私は応答を得ていますが、500の代わりに200ステータスを返しています。

何か間違っているのですか、何か不足していますか?

他の問題を調べてみましたが、私を助けてくれるものは見つかりませんでした。

+0

(?):要求が悪い場合は、500が間違った応答コードです。 400は正しいです。 – deceze

+0

はい、そうです。しかし、URLが一致しない場合、私は別のエラーコードを返すサービスではありませんでした。したがって、私はwithStatus(500)がそれを行うことをSLIM文書で読みました。しかし、なぜこれが動作していないのか分かりません。 –

+0

@deceze - あなたが私が言っていることを得たことを願っています。私はちょうどwithStatusを使用してステータスを変更したいと考えていますが、これは動作しません。 –

答えて

2

Responseオブジェクトは変更不可能なため、変更することはできません。 with*()メソッドは、変更された値を持つResponseオブジェクトのコピーを返します。

$app->get('/', function(Request $request, Response $response, $args = []) { 
    $error = array('result' => false, 'message' => 'Bad Request', 'dev'=>'', 'data' => []); 
    $response->write(json_encode($error)); // helper method for ->getBody()->write($val) 
    return $response->withStatus(500); 
}); 

あなたはwriteに値を再割り当てする必要がいけない理由this answerを参照してください。

また、代わりにwithJsonを使用することができます。別に

$app->get('/', function(Request $request, Response $response, $args = []) { 
    $error = array('result' => false, 'message' => 'Bad Request', 'dev'=>'', 'data' => []); 
    return $response->withJson($error, 500); 
}); 
+0

ありがとうございます。これはうまくいった。私はこれを前に試しましたが、私はそれを間違って呼んでいたようです。 :-) –

+0

ねえ同じ問題がありますが、違いは自分のカスタムクラス内で行う必要があることです。私の応答は$ response - > getBody() - > write(json_encode($ this - > parseObject(703、 'Missing Params!')));と書かれています。代わりにレスポンスコードを追加したいのですが、あなたの答えで作業することができませんでした。 –

関連する問題