カテゴリ: Symfony 更新日: 2025/12/11

Symfonyのコントローラで404・403エラーを制御する方法を初心者向けに解説!

Symfonyで404・403をコントローラ内で制御する方法
Symfonyで404・403をコントローラ内で制御する方法

先生と生徒の会話形式で理解しよう

生徒

「Symfonyでアクセスできないページや禁止されたページを表示するにはどうすればいいんですか?」

先生

「Symfonyでは、そういったエラーをコントローラの中で404403として制御できますよ。」

生徒

「404とか403って何ですか?数字ばかりで難しそうです…」

先生

「大丈夫!それはインターネットでよく使われる『エラーの番号』なんです。たとえば、404は『ページが見つかりません』、403は『アクセスが禁止されています』という意味ですよ。」

生徒

「へぇー、そんな意味があるんですね!じゃあSymfonyでどうやってそれを出すのか教えてください!」

先生

「もちろんです!初心者の方でも分かるように、ゆっくり丁寧に説明していきますね。」

1. 404エラーとは?ページが見つからない時に使われる番号

1. 404エラーとは?ページが見つからない時に使われる番号
1. 404エラーとは?ページが見つからない時に使われる番号

404エラーは、ユーザーがアクセスしようとしたWebページがサーバー上に存在しないときに表示されるエラーです。「ページが見つかりません(Not Found)」という意味のHTTPステータスコードで、インターネット全体で共通して使われています。

例えば、URLを打ち間違えた場合や、昔ブックマークしていたページが削除されてしまった場合などに、Symfonyのアプリケーションでも404エラー画面が表示されます。ブログやECサイト、会員ページなど、どんなWebサービスでもよく登場する基本的なエラーです。

Symfonyでは、コントローラの中で「このデータが見つからなかったら404エラーを出す」といった制御が簡単に行えます。下のサンプルのように、ページが存在しないと判断したタイミングで404エラーを発生させるイメージです。


use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class SampleController extends AbstractController
{
    #[Route('/sample', name: 'sample_page')]
    public function sample(): Response
    {
        // 本来はここでページやデータの有無を確認します
        throw $this->createNotFoundException('指定されたページは見つかりませんでした');
    }
}

コードの細かい文法はまだ理解できなくても大丈夫です。「ページが用意できないときには404エラーを返す」という考え方だけ押さえておけば、次のステップで実際のアプリにどう組み込むかが理解しやすくなります。

2. Symfonyで404エラーを出す方法

2. Symfonyで404エラーを出す方法
2. Symfonyで404エラーを出す方法

では、実際にSymfonyのコントローラで404エラーを出す方法を見てみましょう。Symfonyでは、ページやデータが見つからなかったときに、throw $this->createNotFoundException()という命令を実行することで、「このページはありません」という404エラーを発生させることができます。

「throw(スロー)」は「例外を投げる」という意味のプログラミング用語だと思ってください。難しく考えず、「ここでエラー画面に切り替えてほしい」とSymfonyにお願いする合図だとイメージすると分かりやすいです。


use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class PageController extends AbstractController
{
    #[Route('/page/{id}', name: 'page_show')]
    public function show(int $id): Response
    {
        // 本来はここでデータベースなどからページ情報を探します
        $data = null;

        // データが見つからなかった場合は404エラーを発生させる
        if (!$data) {
            throw $this->createNotFoundException('ページが見つかりませんでした');
        }

        // データがあれば通常どおりページ内容を返す
        return new Response('ページの内容を表示します');
    }
}

このサンプルでは、あえて$datanull(何もない状態)にしているので、必ずif (!$data)の中に入り、404エラーが発生します。実際のWebアプリケーションでは、ここにデータベースから記事や商品情報を取りにいく処理が入り、「見つかったら表示」「見つからなければ404エラー」という流れになります。

プログラミング初心者の方は、まずは「データがなければcreateNotFoundException()を使うと404エラーになる」という感覚をつかんでおけば十分です。細かい文法は後から少しずつ覚えていけばOKなので、404エラーを出す位置やタイミングを意識しながら、Symfonyのコントローラの流れを確認してみてください。

3. 実行結果のイメージ

3. 実行結果のイメージ
3. 実行結果のイメージ

ここまでの設定ができていれば、ブラウザで実際にURLへアクセスしたときに、Symfonyが404エラーを返してくれるようになります。例えば、まだ存在しないページIDにアクセスしたときの動きをイメージしてみましょう。


http://localhost:8000/page/1 にアクセス
↓
ページが見つかりませんでした(404 Not Found)

このように、Symfony側でcreateNotFoundException()が投げられると、自動的に404専用のエラー画面が表示され、「指定されたページは見つからない」ということをユーザーにわかりやすく伝えてくれます。

画面の見た目は環境によって多少異なりますが、共通して「404」「Not Found」「ページが見つかりませんでした」といったメッセージが表示されるので、Webブラウザを使い慣れている人であれば一目で「存在しないページなんだな」と判断できます。Symfonyでは、この404エラーの仕組みを利用して、存在しない記事や削除された商品ページにアクセスされた場合でも、きちんとエラー画面に切り替えてユーザーを迷子にさせないようにすることができます。

4. 403エラーとは?アクセスが禁止されているときに使われる番号

4. 403エラーとは?アクセスが禁止されているときに使われる番号
4. 403エラーとは?アクセスが禁止されているときに使われる番号

403エラーは、「このページを見る権限がありません」というときに使います。

たとえば、ログインしていない人がマイページにアクセスしようとしたときなどに使われます。

Symfonyでは、throw new AccessDeniedException()という書き方で403エラーを出すことができます。

5. Symfonyで403エラーを出す方法

5. Symfonyで403エラーを出す方法
5. Symfonyで403エラーを出す方法

Symfonyでは、アクセス制限を手動で制御することも可能です。以下のようにAccessDeniedExceptionを使って、ユーザーの条件に応じて403エラーを表示できます。


use Symfony\Component\Security\Core\Exception\AccessDeniedException;

#[Route('/admin', name: 'admin_page')]
public function admin(): Response
{
    $userHasAccess = false; // 本来は認証情報などで判定

    if (!$userHasAccess) {
        throw new AccessDeniedException('このページにはアクセスできません');
    }

    return new Response('管理者ページへようこそ');
}

このように書くと、ユーザーに403エラーが表示されます。

6. Symfonyのエラー制御はユーザー体験にとって大事

6. Symfonyのエラー制御はユーザー体験にとって大事
6. Symfonyのエラー制御はユーザー体験にとって大事

プログラムを書く上で、ユーザーに正しい情報を伝えることはとても大切です。

  • 間違ったページには404エラーで「見つかりません」と伝える
  • 許可されていないアクセスには403エラーで「アクセスできません」と伝える

これらを適切に使い分けることで、ユーザーが混乱せず安心してウェブサイトを利用できます。

7. Symfonyで使えるエラー制御のまとめ

7. Symfonyで使えるエラー制御のまとめ
7. Symfonyで使えるエラー制御のまとめ
  • $this->createNotFoundException() → 404エラー(ページが見つからない)
  • new AccessDeniedException() → 403エラー(アクセス禁止)

どちらも、Symfonyのコントローラ内で簡単に使えるので、初心者でもすぐに実装できます。

まとめ

まとめ
まとめ

Symfonyのコントローラで扱う四百四エラーや四百三エラーの仕組みを改めて整理すると、初心者でも理解しやすい「ページが見つからない場合」と「アクセスが禁止されている場合」という二つの状況を明確に切り分けることがとても大切だと分かります。とくに四百四エラーは存在しない記事や削除されたページにユーザーが迷い込んだときに優しく案内する役割を持ち、四百三エラーはみる資格がないページへのアクセスを未然に防いでくれる重要な安全対策として機能します。Symfonyでは、これらのエラーをコントローラ内部で簡単に投げることができ、複雑な設定をせずとも明確な状態遷移を実現できます。 また、実際の開発現場では記事詳細ページや管理ページなど、さまざまな機能にエラー制御を組み込むことで、ユーザー体験を高めることができ、安心して利用できる操作環境をつくることにつながります。とくに動的にデータを操作する場面では、対象のデータが存在しない場合に四百四を返す制御を適切に挟むことで、検索機能や一覧表示からの詳細遷移が正しく動作するようになります。 このように、初心者がまず押さえるべきポイントは「データがなければ四百四」「権限がなければ四百三」という単純な基準です。これを基礎として覚えることで、Symfonyのルーティングやリクエスト処理の流れもさらに理解しやすくなります。下記のサンプルコードのように、実際のコントローラ内で条件を判定して適切な例外を投げる処理を組み込む練習をすると、より実践的なアプリケーション開発へスムーズにステップアップできます。

サンプルプログラム(四百四・四百三の制御まとめ)


use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;

class ErrorSampleController extends AbstractController
{
    #[Route('/article/{id}', name: 'article_show')]
    public function showArticle(int $id): Response
    {
        $article = null; // 本来はデータベース検索結果

        if (!$article) {
            throw $this->createNotFoundException('記事が見つかりませんでした');
        }

        return new Response('記事の内容を表示します');
    }

    #[Route('/settings', name: 'user_settings')]
    public function settings(): Response
    {
        $hasPermission = false; // 本来はログイン情報などで判定

        if (!$hasPermission) {
            throw new AccessDeniedException('設定ページにはアクセスできません');
        }

        return new Response('設定ページを表示します');
    }
}

上記のような構成を身につけると、Symfonyでのウェブ開発において「存在しないデータ」「閲覧できない領域」を正しく管理でき、利用者が迷わない安全なサイト構築が可能になります。ウェブサービスでは、ユーザーがどのような状況であってもわかりやすい案内が求められるため、これらのエラー制御は欠かせない基本技術として活用されます。そこで四百四エラーと四百三エラーを適切に扱い、ルートごとのアクセス制御を丁寧に行うことで、検索ページや会員ページなど幅広い場面で役立てることができます。 また、情報量の多いサイトや動的な操作が多いサービスでは、誤った操作や想定外の遷移が発生しやすいため、明確なエラーを返すことが安心感を生みます。こうした制御は、多くのウェブアプリケーションで非常に重要な役割を果たしており、Symfonyが提供する柔軟な例外処理の仕組みが開発者を力強く支えてくれます。初心者の段階では、まず「条件を判定して適切なエラーを返す」という流れを意識し、アプリケーション全体の整合性を保つ技術として繰り返し活用していくことが大切です。

先生と生徒の振り返り会話

生徒

「四百四と四百三の違いがかなり分かりやすくなりました!データがなければ四百四で、権限がなければ四百三なんですね。」

先生

「その通りです。Symfonyではコントローラで簡単に制御できますから、まずは条件分岐と例外を組み合わせるところから慣れていくと良いですよ。」

生徒

「これなら記事ページや管理ページでも応用できそうです!エラーの意味も少しずつ覚えられそうです。」

先生

「ええ、とても良い流れです。まずは基本をしっかり押さえて、慣れてきたら細かい権限制御やテンプレート側の表示調整にも挑戦してみましょう。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Symfonyのコントローラで404エラーを出すにはどうすればよいですか?

Symfonyでは、コントローラ内でcreateNotFoundExceptionを使うことで404エラーを簡単に出すことができます。このメソッドにより「ページが見つかりません」というメッセージが表示されます。
関連記事:
カテゴリの一覧へ
新着記事
New1
Laravel
Laravelの認証状態をチェックする方法を完全解説!authとAuth::check()を初心者向けにやさしく説明
New2
CodeIgniter
CodeIgniterのコントローラクラスの作り方を完全ガイド!初心者でもわかる基礎から実践まで
New3
Symfony
Symfonyのフォームラベルを多言語対応!初心者でもわかる翻訳設定ガイド
New4
Laravel
Laravelでユーザー登録機能を作る方法!初心者向けにバリデーションとリダイレクトをやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.2
Java&Spring記事人気No2
Laravel
Laravelのビューとは?Bladeテンプレートの基本を解説
No.3
Java&Spring記事人気No3
Laravel
Laravelでセッションを扱う方法!保存方法と利用例を解説
No.4
Java&Spring記事人気No4
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
No.5
Java&Spring記事人気No5
Laravel
Laravelでルーティングを設定する方法!web.phpと基本ルートの書き方を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.7
Java&Spring記事人気No7
Laravel
Laravelのルートキャッシュ機能を活用してパフォーマンス改善!初心者でもわかる完全ガイド
No.8
Java&Spring記事人気No8
Laravel
LaravelでルートをBladeテンプレートに記述する方法(route関数)