LoginSignup
0
0

More than 1 year has passed since last update.

【Laravel】Requestをそのままコントローラー外に渡さない【リファクタリング】

Last updated at Posted at 2022-06-09

環境

Laravel v9.5.1 (PHP v8.1.3)

Bad

$requestをそのまま引数として渡してしまっているのが問題。
引数1つで済むからいっか!とやってしまっていた。

app/Http/Controllers/Api/PostController.php
public function store(PostRequest $request)
{
   $request->user()->givePost($request);

   return response()->json(Response::HTTP_OK);
}
app/Models/User.php
public function givePost(Request $request): Post
{
   $post = $this->createPost($request->content, $request->title);
   // このあとの処理は省略

   return $post;
}

教訓:Requestをそのままコントローラー以外に渡さない!

渡すには大きすぎるという例えで分かりやすかったのが、ホームセンターの例。
庭に木を植えたいとしたら、ホームセンターに売ってる木だけほしいのにホームセンターごと渡されてるようなものらしい。
そりゃデカいわと納得!

Better

$requestの中の何を渡すのかを明示する。
この場合は下記

$request->content
$request->title

app/Http/Controllers/Api/PostController.php
public function store(PostRequest $request)
{
   $user->givePost($request->content, $request->title);

   return response()->json(Response::HTTP_OK);
}
app/Models/User.php
public function givePost(string $content, string $title): Post
{
   $post = $this->createPost($content, $title);
   // このあとの処理は省略

   return $post;
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0