この記事の背景
ユーザーの編集機能を作っていた時のことです。
コントローラーを作成した時に、もしログインしていなかったら
エラーではなく、アクセスできない画面を出すように指示がありました。
この時に使いました。この時にabort()
のことを知りました。
abort()とは
ユーザーのリクエストが違っていた時に、真っ白なページではなく「Not found」のようなエラーページになると親切です。こういう時に必要です。
実際のユースケース
UsersController.php
public function edit($id)
{
#都合により省略
$data = [
'user' => $user
];
return view('users.edit', $data);
}
abort(404);
}
ログインしていないユーザーが編集できないようにします。
今回のケースだと404(認証できないので見せられません)
となります。
ログインしたユーザーではないからですね。
abort404
Laravelのコントローラでabort(404)のヘルパーを書くと予期しないエラーが発生した時に、
Not Foundページの代わりにリダイレクトして違うページに飛ばしたいとき、
redirect()
のヘルパーをabort()と同じように好きな場所で使えないみたいです。
redirect()は、以下のようにreturnが必要です。
class ProductController extends Controller
{
public function show(Product $product)
{
if ($product->active_flag == 'N') { // 無効な商品なら、
return redirect('home'); // ホームページにリダイレクト
}
return view('user.product.show')->with(compact('product')); // 商品のページを表示
}
}
ステータスコード種類
この記事を参考にしてみてください。
資料