- カテゴリ: helper
- 掲載バージョン: Laravel 12・PHP 8.4
- 名前空間 / FQCN / コマンド:
abort() - 関連: abort_if, abort_unless, abort_if (HTTP), HttpException
- 変更履歴: 初期版より提供(挙動の本質的変更なし)
要点(TL;DR)
- 指定した HTTPステータスで即時にリクエスト処理を中断する
- 最小例:
abort(404); - 罠:
abort()以降のコードは 一切実行されない- JSON/API では レスポンス形式に注意
- ビジネスロジックの深部で多用すると 可読性が下がる
概要
abort() は、処理途中で HTTP例外を投げて即座にレスポンスを返すための Laravel ヘルパーです。
存在しないリソース、権限不足、不正な状態など、正常に処理を続けられない場合の早期リターンに使われます。
コントローラ・ミドルウェア・サービス層のどこからでも呼び出せます。
構文 / シグネチャ
abort(int $code, string $message = '', array $headers = []): never
- 引数
| 引数 | 型 | 必須 | 既定値 | 説明 |
|---|---|---|---|---|
| $code | int | はい | — | HTTPステータスコード |
| $message | string | いいえ | ” | 例外メッセージ |
| $headers | array | いいえ | [] | 追加HTTPヘッダ |
- 戻り値:なし(
never。例外を投げて終了) - 例外/副作用:
Symfony\Component\HttpKernel\Exception\HttpExceptionを送出
使用例
最小例
// 存在しない場合は 404
abort(404);
実務例
use App\Models\Post;
public function show(int $id)
{
$post = Post::find($id);
if (! $post) {
abort(404, 'Post not found');
}
if (! $post->is_public) {
abort(403);
}
return view('posts.show', compact('post'));
}
API(JSON)での例
abort(422, 'Invalid state');
※ API では例外ハンドラ設定により、JSON形式で返却されます。
よくある落とし穴・注意
- 後続コードは実行されない
abort()は例外送出のため、return の代わりではありません。 - 乱用すると制御が追いにくい
サービス層の深い場所で多用すると、どこで止まるか分かりにくくなります。 - APIとWebでレスポンス形式が異なる
Accept: application/jsonにより JSON になる点を理解しておく必要があります。
代替・関連APIとの比較
- abort_if($condition, $code)
条件付きで簡潔に書きたい場合に適する。 - abort_unless($condition, $code)
「条件を満たさなければ中断」という意図を明確にできる。 - 例外を自作して throw
ドメインルールとして扱いたい場合や、再利用性を高めたい場合に有効。
テスト例(Pest)
it('returns 404 when post not found', function () {
$response = $this->get('/posts/999');
$response->assertStatus(404);
});
トラブルシュート(エラー別)
| 症状/エラー | 原因 | 対処 |
|---|---|---|
| 画面が真っ白 | 例外がハンドルされていない | APP_DEBUG を確認 |
| JSONで返らない | Acceptヘッダ未指定 | APIリクエストに Accept: application/json |
| テストが途中で止まる | abort() による例外 | ステータスアサーションで検証 |

