🦀

laravel6.2¦リクエストに値を追加/コントローラーから別メソッドを呼んでリダイレクト

2020/10/20に公開

環境

・laravel 6.2
・php 7.2

リクエストに値を追加する

💡$requestに特定の値を加えて処理したい場合

今回は新規登録→登録されたidを、プロフィール画像のパスに加えて画像を登録する感じです

public function store(Request $request, User $user)
{
    $input = $request->all();
    DB::beginTransaction();
    try {
        $createData = $user->create($input);
        // requestにlast_insert_idを追加して別の処理
        $request->merge(['id' => $createData->id]);
        $path = $this->updateImage($request);
        // ...略...

        DB::commit();
    } catch (Exception $e) {
        DB::rollBack();
        throw $e;
    }
    // ...略...
}

コントローラーから別メソッドを呼んでredirectさせたい

スキャフォルドで作ると大体書いてあるような、
・contorller内で毎回ユーザーなど登録/編集/削除などしたい対象の存在をチェック
・DBに存在しない場合は「(項目)が存在しません」メッセージと共にリダイレクトする
このような処理を共通処理をメソッドにした場合…

public function show($id)
{
    $user = $this->user->find($id);
    if (empty($user)) {
        $this->notFoundData();
    }
    return view('user.show', compact('user'));
}

private function notFoundData()
{
    Flash::error(__('messages.not_found', ['attribute' => __('title.user')]));
    return redirect(route('user.index'));
}

if文に入った場合はリダイレクトしてエラーメッセージを表示させたいのですが、この書き方だとshowメソッドへRedirectResponseオブジェクトが返って来て、そのままif文を抜けて先に進みます( ´_` )

リダイレクトするように修正

private function notFoundData()
{
    Flash::error(__('messages.not_found', ['attribute' => __('title.user')]));
    // throwResponseの追加
    return redirect(route('user.index'))->throwResponse();
}

🎪🎪🎪

設計がよくない可能性がありますが…
一応done! =͟͟͞͞( ˊᵕˋ )

Discussion