🦀
laravel6.2¦リクエストに値を追加/コントローラーから別メソッドを呼んでリダイレクト
環境
・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