SymfonyでフォームをTwigに表示する方法を完全ガイド!初心者でもできるテンプレート入門
生徒
「Symfonyで作ったフォームって、どうやって画面に表示するんですか?」
先生
「Twigテンプレートを使えば、簡単にフォームを表示できますよ。」
生徒
「テンプレートってなんですか?フォームを表示するには特別な書き方があるんですか?」
先生
「テンプレートは、画面の見た目を作るファイルです。フォームを表示するためには、Twigで専用のタグを使って書くだけです。」
1. Twigとは?Symfonyで使うテンプレートエンジン
Symfony(シンフォニー)は、PHPで作られた人気のあるフレームワークです。そしてTwig(トゥイッグ)は、Symfonyの中で使われるテンプレートエンジンです。テンプレートエンジンとは、Webページの見た目(HTML)と中身(PHPの処理)を分けて作るための仕組みです。
たとえば、フォームや表、文章などを画面に表示したいとき、Twigを使えばPHPの難しいコードを書かなくても、見た目の部分をシンプルに記述することができます。
2. Symfonyでフォームを作ったら、Twigで表示する
Symfonyでは、フォームの作成とTwigでの表示が分かれています。まずは、コントローラでフォームを作り、それをTwigテンプレートに渡して、画面に表示する流れになります。
今回は「名前」を入力するだけの簡単なフォームをTwigで表示する方法を見ていきましょう。
3. コントローラでフォームを作成する
まずは、PHPのコントローラでフォームを作成して、Twigに渡します。以下のようなコードになります。
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class SampleController extends AbstractController
{
public function index(Request $request): Response
{
$form = $this->createFormBuilder()
->add('name', TextType::class)
->add('send', SubmitType::class, ['label' => '送信'])
->getForm();
return $this->render('form/sample.html.twig', [
'myForm' => $form->createView()
]);
}
}
ここでは、createFormBuilder()というSymfonyの機能を使ってフォームを作り、render()でTwigテンプレートに渡しています。
4. Twigテンプレートにフォームを表示する方法
次に、Twigファイル(例:form/sample.html.twig)で、画面にフォームを表示します。Twigには、Symfonyのフォーム専用の関数が用意されていて、とても簡単に書けます。
{% extends 'base.html.twig' %}
{% block body %}
<h2>名前を入力してください</h2>
{{ form_start(myForm) }}
{{ form_row(myForm.name) }}
{{ form_row(myForm.send) }}
{{ form_end(myForm) }}
{% endblock %}
form_startは、フォームのはじまりを表すタグ(HTMLでいう<form>)を自動で出力します。
form_rowは、ラベル・入力欄・エラー表示などをまとめて一行で出してくれる便利なタグです。
form_endは、フォームの終わり(</form>)を出力します。
5. 実際の表示例
ブラウザでこのTwigテンプレートを表示すると、次のようにフォームが画面に表示されます。
名前を入力してください
[名前の入力欄]
[送信ボタン]
このように、Twigを使えばPHPの複雑なコードを書かなくても、簡単にフォームを画面に表示できます。
6. Twigでフォームを個別にカスタマイズする方法
フォーム全体を一括で表示する{{ form(myForm) }}という方法もありますが、細かく制御したい場合は、form_rowやform_label、form_widgetを使い分けます。
例えば、ラベルと入力欄を別々に書く場合はこうします:
{{ form_label(myForm.name) }}
{{ form_widget(myForm.name) }}
こうすることで、デザインやレイアウトを細かくコントロールできるようになります。
7. 画面に反映されないときのチェックポイント
- フォームオブジェクトを
createView()で変換しているか - テンプレートに
{{ form_start }}などが書かれているか - Twigファイルの名前とパスが正しいか
- Symfonyキャッシュをクリアしているか
画面にフォームが出ないときは、上記を順番に見直してみてください。
8. Twigでのフォーム表示は初心者にもおすすめ
Twigを使えば、難しいPHPの記述なしに、視覚的にもわかりやすくフォームを作れます。Webアプリケーション開発では、ユーザーからの入力を受け取るフォームがとても重要です。
Twigはその橋渡し役として、HTMLとPHPのいいとこどりをした書き方ができるので、初心者にもやさしい構成になっています。