質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

1回答

2067閲覧

サービスクラスから直接画面にreturnしたい

larachan

総合スコア28

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2020/02/20 09:14

編集2020/02/20 09:50

LaravelでAPIを作っています。

Api呼び出し→ルーティング→コントローラー→サービスクラス→モデル、IF等→サービスクラス→コントローラー→API呼び出し元に値を返却できればと思いますが、
サービスクラス内でエラーが起きた場合、下記のパターン
Api呼び出し→ルーティング→コントローラー→サービスクラス→モデル、IF等→サービスクラス→API呼び出し元

サービスクラスのJsonレスポンスをAPI呼び出し元に返却可能でしょうか。

以上、宜しくお願い致します。

ソースがないとわからないとのことなのでサンプルです。

ルーティング

Route::post('/service', 'AbcController@select');

コントローラー

class AbcController extends Controller { protected Abc $Abc ; public function __construct(Abc $abc) { $this->Abc = $Abc ; } public function select(Request $request) { $json = Service::sample($this->Abc, $request);          return response()->json(json , 500, [], JSON_UNESCAPED_UNICODE); } }

サービスクラス

class Service { public static function sample(Abc $abc, $request) { //IDをキーに管理テーブルからレコード取得 $def = $abc->findByIdXXXX($request->input('xxxx_id')); //例外キャッチされたか判定 //コレクションならfalse、stringならtrue if(is_string($def) === false) { return $def; } Log::critical('', ['request' => $request], ['message' => $def]); //エラー //ここからAPI呼び出し元にJsonレスポンス返却したい     //通常リターンならばコントローラーに返るから return response()->json(null, 500, [], JSON_UNESCAPED_UNICODE); } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/02/20 09:27

実際のコードがないとなんとも言えないのでは。
guest

回答1

0

ベストアンサー

レスポンスを返すのがコントローラーの役割なので
サービスクラスからはこれだけ。

return $abc->findByIdXXXX($request->input('xxxx_id'));

判定はコントローラーで。

$def = Service::sample(); if(is_string($def) === false) { return response()->; } else { return response()->; }

少し別の話。
そもそもエラーの判定がこれでいいのかとかサービスクラスに分けてる意味がないとかあるけど
一番まずいのはstaticメソッドで作ってる所。
とてつもなく迷惑かけることになるのでこれだけはやめてほしい。

public static function sample(Abc $abc, $request)

普通に作った上で

public function sample(Abc $abc, $request)

コントローラーではこう使うのがLaravelでの普通。

public function select(Request $request, Service $service) { $json = $service->sample($this->Abc, $request); }

投稿2020/02/20 10:58

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

larachan

2020/02/21 01:39 編集

staticだと迷惑をかけるのですね。。。ありがとうございました。 Serviceクラスにはビジネスロジックを書くとのことだったので、判定等も書くのかと思っていました。 ソースまでご丁寧にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問