$request = Request::forge($url, 'curl'); $response = $request->execute(); $response = $this->logger->log(\Fuel::L_ERROR, $response); $response = $response->response(); // ここで例外
このようなコードをかいて URL 先のネットワークに接続できない場合
response() で例外をはきます
その前の execute() の結果を出力してみると膨大な中身が出力されるんですが
execute() の時点で接続失敗したことを検知するにはどうすればいいのでしょうか
http://fuelphp.jp/docs/1.7/classes/request/request.html
ドキュメントには excute の後 response 以外のメソッドがのっていません
例外で検知するしかないですか?
追記:
try { $request = Request::forge($url, 'curl'); $response = $request->execute(); $response = $response->response(); $scope = $response->body; } catch (\Exception $e) { $resMsg = json_decode($e->getMessage()); if(isset($resMsg->error)){ : } else { : // ここにとんでくる } }
のような感じで接続に成功すること前提で例外を分岐に使ってるようなコードがあって
レスポンスフォーマットによって例外をだすださないで分岐してるような糞コードみたいで
接続失敗の際に正常処理扱いされて他の場所に影響がでている感じなのです
(自分がかいたわけではないのでレスポンスの中身やロジックが不明)
なので接続失敗の場合だけさっさと別のエラーレスポンスを返してしまいたいです
追記:
{'error' : 'message'}
というようなレスポンスを返却したとして
例外にとんできて $e->getMessage() で取得できるロジックもよくわからないのですが…
これが Request::forge の普通の使い方なのでしょうか
>response() で例外をはきます
try-catchで例外を捕捉するとかそういう話ではないのでしょうか?
追記をみていただきたいのですが
すでに例外を別の正常処理の一部に使われているので
コネクションエラーだけを正常処理から分離したい感じです
>json_decode($e->getMessage());
ここが良く分かりません。通常はgetMessage()には単なる文字列が入っているはずですが、フレームワークの方でJSON形式のエラーをおさめるようになっているということでしょうか?(FuelPHPは未経験なので私が知らないだけかもしれませんが)
自分もよくわかっていませんがそこで例外は出ていないようです
どうもそこに入るメッセージは相手のサーバー側で作成しているようで
そっちのレスポンスも同じ人がかいたものなので JSON で返却して error というキーをいれるかどうかで対応をかえてるんだと想像してます
そもそも元が自身が書いたコードではないということでしょうか。
そうです
回答1件
あなたの回答
tips
プレビュー