EC-CUBE Advent Calendar 2020 3日目の記事です。
EC-CUBE4でステップ分割されたアンケートフォームを作る方法です。
今回、以下のような感じに質問が分割されたアンケートフォームを作ります。
回答内容はデータベースに保存されます。
CraueFormFlowBundleをインストール
CraueFormFlowBundleは、マルチステップフォームの構築および処理するための機能をかんたんに実装できるSymfonyのバンドルです。
以下のようにコマンドを実行してCraueFormFlowBundleをインストールしてください。
認証キーが設定されていないとインストールできませんので認証キーを登録しておいてください。
bin/console eccube:composer:require craue/formflow-bundle
インストールするとbundles.phpに登録されますが、登録されていない場合は以下のコードをbundles.phpに追記してください。
Craue\FormFlowBundle\CraueFormFlowBundle::class => ['all' => true]
アンケート用のエンティティを作成
以下のようにアンケート用のエンティティを作成してください。
CraueFormFlowBundleの仕様上、バリデーションの設定はエンティティで行っています。
あとで作成するフォームフローでバリデーションを設定するため、バリデーショングループも設定しています。
エンティティを作成したらデータベースに反映させるため以下のコマンドを実行してください。
bin/console doctrine:schema:update --force
アンケート用のリポジトリを作成
以下のようにアンケート用のリポジトリを作成してください。
アンケートのフォームタイプを作成
アンケートのフォームタイプを作成します。
ここではフォームのオプションのflow_stepでステップを判定して、出力するアンケート項目をステップごとに分けています。
アンケートのフォームフローを作成
各ステップの細かい設定をするためフォームフローを作成します。
フォームフローではエンティティで作成したバリデーショングループの設定や、特定の条件であるステップをスキップするといった調整ができます。
アンケート用のコントローラーを作成
以下のようにアンケート用のコントローラーを作成してください。
アンケート用のTwigテンプレートを作成
以下のようにアンケート用のTwigテンプレートを作成してください。
以上で完成です。
特定条件でステップをスキップしたいなど、細かい設定がしたい場合はCraueFormFlowBundleのドキュメントを読めば一通りのことが理解できると思います。