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

Symfonyでフォーム送信後の再表示と入力保持を実装する方法!初心者向けに丁寧解説

Symfonyでフォーム送信後の再表示と入力保持の実装方法
Symfonyでフォーム送信後の再表示と入力保持の実装方法

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

生徒

「先生、Symfonyでフォームを送信したあとに、入力した内容が消えちゃうんです…どうしたら入力を保持できますか?」

先生

「Symfonyにはフォーム再表示と入力保持の仕組みが用意されているので、それを使えば大丈夫ですよ。」

生徒

「再表示って、エラーが出たときにも同じ画面に戻るってことですよね?」

先生

「そのとおりです。入力チェックでエラーがあったときに、もう一度同じフォーム画面に戻して、入力内容もそのまま表示させる方法を紹介しますね。」

1. Symfonyのフォーム処理の基本

1. Symfonyのフォーム処理の基本
1. Symfonyのフォーム処理の基本

Symfonyでは、Formコンポーネントを使ってフォームを作成し、リクエストを処理します。

フォームの入力を受け取るには、リクエストオブジェクトを使ってデータをバインド(関連付け)します。そして、エラーがある場合は、同じテンプレートに戻すことで、再表示と入力の保持が自動で行われます。

2. コントローラ側の基本的な書き方

2. コントローラ側の基本的な書き方
2. コントローラ側の基本的な書き方

フォーム送信後の再表示と入力保持を実現するには、コントローラで以下のように処理します。


use App\Entity\User;
use App\Form\UserType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class UserController extends AbstractController
{
    public function register(Request $request): Response
    {
        $user = new User();
        $form = $this->createForm(UserType::class, $user);

        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            // 保存処理など
            return $this->redirectToRoute('success');
        }

        return $this->render('user/register.html.twig', [
            'form' => $form->createView(),
        ]);
    }
}

ポイント解説:

  • handleRequest():送信されたデータをフォームに適用
  • isSubmitted():フォームが送信されたかどうかを確認
  • isValid():バリデーションが成功したかどうかを確認
  • 失敗時は同じテンプレートを再表示する

3. Twigテンプレートでのフォーム表示

3. Twigテンプレートでのフォーム表示
3. Twigテンプレートでのフォーム表示

フォームを表示するテンプレート(HTML)では、form_startform_widget を使うことで、Symfonyが自動的に入力内容を再描画してくれます。


{# templates/user/register.html.twig #}
{{ form_start(form) }}
    {{ form_row(form.name) }}
    {{ form_row(form.email) }}
    {{ form_row(form.password) }}
    <button type="submit" class="btn btn-primary">送信</button>
{{ form_end(form) }}

form_row はラベル、入力欄、エラーメッセージをまとめて出力してくれる便利な関数です。

4. バリデーションエラー時の再表示

4. バリデーションエラー時の再表示
4. バリデーションエラー時の再表示

入力に不備があった場合でも、同じフォーム画面が表示され、ユーザーが入力した内容はそのまま保持されます。

たとえば、メールアドレスが空だったときは、次のような画面になります。


メールアドレスを入力してください

しかも、他の入力欄の内容は失われず、そのまま表示されるので、ユーザーの再入力の手間が省けます。

5. 入力保持の仕組み

5. 入力保持の仕組み
5. 入力保持の仕組み

Symfonyのフォームは、バインドされたエンティティにデータを一時的に保存し、Twig側で再描画するときにその値を使ってくれます。

この仕組みのおかげで、入力保持の処理を自分で書かなくても、標準で実現できます。

6. リダイレクト先で入力内容を保持したい場合は?

6. リダイレクト先で入力内容を保持したい場合は?
6. リダイレクト先で入力内容を保持したい場合は?

通常の再表示ではなく、別の画面にリダイレクトしたいけど、入力内容も保持したいというケースもあります。

このようなときは、セッションという仕組みを使って、一時的にデータを保存しておき、次のページで取り出して使います。


$session = $request->getSession();
$session->set('form_data', $form->getData());

そしてリダイレクト先で次のように取り出します。


$formData = $session->get('form_data');

ただし、通常のフォーム画面でのエラー再表示なら、セッションを使わなくても自動で入力保持されます。

7. 画面デザインでの注意点

7. 画面デザインでの注意点
7. 画面デザインでの注意点

フォームのUI(ユーザーインターフェース)を作るときに、以下の点を意識すると親切です。

  • 必須項目には「※必須」などのラベルを付ける
  • エラー表示は目立つ色(赤など)で表示する
  • 再送信時に入力が消えていないことを確認する

SymfonyではBootstrapと組み合わせることで、見た目もきれいなフォームを簡単に作れます。

関連記事:
カテゴリの一覧へ
新着記事
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関数)