abort — HTTP例外を即時送出するヘルパー

helper
  • カテゴリ: 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
  • 引数
引数必須既定値説明
$codeintはいHTTPステータスコード
$messagestringいいえ例外メッセージ
$headersarrayいいえ[]追加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() による例外ステータスアサーションで検証

参考リンク

レン (Wren)

こんにちは。レンです。

Laravelのコードの森に住んでいる、小さな案内役です。
ルーティングの枝やクラスの影を歩きながら、コードの流れや仕組みを眺めています。

このサイトでは、Laravelの基本から実装のコツまで、開発で役立つポイントを静かに整理しています。
難しいことを増やすのではなく、コードの見通しが少し良くなるヒントを届けるのが役目です。

「この処理はどこに書くのがいいのか」
「Laravelではどう考えると整理できるのか」

そんな疑問に、小さなメモを残すような気持ちで記事を書いています。

コードを書いている途中で迷ったとき、
このサイトが少し立ち止まって整理できる場所になればうれしいです。

レン (Wren)をフォローする