SymfonyでFormを生成した際に、自動的に「form-control」というBootstrapのclassがつくのが気になって調べました。
結果から述べると、Form Themeの設定がDefaultでbootstrapになっているのが原因でした。
Form Themesとは
簡単に説明すると、Symfonyが生成するFormのテンプレートを設定できます。
設定されたテーマをもとに、生成されます。
設定場所
# config/packages/twig.yaml twig: form_themes: ['bootstrap_4_layout.html.twig']
上記twig.yamlの設定を変更することで、テーマを変更することができます。
上記例は、bootstrap4を使用したい場合の例です。初期値も最近のバージョンではこれみたいです。
どのようなテーマが用意されているかは公式のドキュメントを参考にしてください。
classがない基本的なtheme
私の例のように、bootstrapの「form-control」が自動的にclassとして定義されないようにするには、下記参考。
# config/packages/twig.yaml twig: form_themes: ['form_div_layout.html.twig']
また、twig単位で設定したい場合は下記のように、form_theme
を設定することができます。
{# this form theme will be applied only to the form of this template #} {% form_theme form 'bootstrap_5_layout.html.twig' %}
公式ドキュメントをみていると、自作テンプレートを作成したりなど、結構細かい設定ができそうですね。
今までは、Symfonyが生成するフォーム以外のhtml構造を使いたい場合は、form_widget
を使わずに、formのデータを直接タグに埋め込む作り方をしていました。Form Themeを作ることでより使いやすくなりそうですね。
Symfonyおすすめ書籍
あまり種類がないのと、そもそもフレームワークとして情報が膨大なので、入門でも結構読み応えがあります。
「PHPフレームワーク Symfony 4入門」