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

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

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

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

Q&A

解決済

1回答

1086閲覧

FatControllerの解決策(FormRequestの使用)について

yuina711

総合スコア9

Laravel

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

0グッド

0クリップ

投稿2021/05/11 02:23

編集2021/05/11 02:33

##わからないこと
FatControllerを避ける為の解決策として、リクエストのデータに関する処理を FormRequest に記述するといった解決策があること知り、使い方について学んでいます。

FormRequestにて、rules()を使いバリデーションを設定することでcontrollerの可読性が上がることは理解できたのですが、
下記のようなコードの場合に、indexメソッドにある$requestに関する処理も個別にIndexRequestを作成してFormRequestにまとめるべきなのか?と思い、ドキュメント等を調べたのですが言及されている記事を見つけることができず困っています。(ググり力がなく申し訳ございません)

このぐらいの行数であればこのままメソッド内にベタ書きでも良いのかなと思っていますが、今後の変更(コードが増えること)を想定して予め機能単位で処理を管理できるようFormRequestに書いておくべきなのでしょうか?FormRequestに書いておくべき場合、記述例を知りたく存じます。何卒、よろしくお願い致します。

php

1public function index(Request $request, Article $article) 2 { 3 $query = Article::with(['user', 'likes', 'tags'])->orderBy('created_at', 'desc'); 4 5 // FormRequestに移すべき処理? 6 if (null !== $request->input('search')) { 7 8 $search_splits = preg_split('/[\p{Z}\p{Cc}]++/u', $request->input('search'), -1, PREG_SPLIT_NO_EMPTY); 9 10 foreach ($search_splits as $value) { 11 12 $query->where('title', 'like', '%' . $value . '%') 13 ->orWhere('body', 'like', '%' . $value . '%') 14 ->orWhere('news', 'like', '%' . $value . '%'); 15 } 16 } 17 $articles = $query->paginate(10); 18 19 return view('articles.index', compact('articles')); 20 }

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

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

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

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

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

guest

回答1

0

ベストアンサー

この場合はどっちでもなくArticleモデル内にクエリスコープで書いたほうがいい。
Laravelならこう書きたい。

php

1$articles = Article::with(['user', 'likes', 'tags']) 2 ->orderBy('created_at', 'desc') 3 ->search($request->input('search')) 4 ->paginate(10);

FormRequestに書いてもいいけど$requestから直接関連する処理だけ。
https://github.com/laravel/breeze/blob/1.x/stubs/default/App/Http/Requests/Auth/LoginRequest.php

投稿2021/05/11 02:48

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yuina711

2021/05/11 05:20 編集

kawax様 ご回答ありがとうございます。 なるほど、このような場合はモデル内にクエリスコープで書く方が良いのですね、教えてくださりありがとうございます。大変勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問