この記事では、タイトルにあるフォーム部品3種の実装方法について紹介します。
EC-CUBEにおけるフォーム実装方法
通常のHTMLでは、フォーム部品は<form>
タグ内に<select>
要素や<input>
要素を配置することで実装します。
- ドロップダウンリスト(セレクトボックス)
-
<select name="example"> <option value="1">選択肢1</option> <option value="2">選択肢2</option> </select>
- ラジオボタン
-
<input type="radio" name="option" value="1"> 選択肢1 <input type="radio" name="option" value="2"> 選択肢2
- チェックボックス
-
<input type="checkbox" name="agree" value="yes"> 同意する
一方、EC-CUBEが採用しているPHPフレームワーク・SymfonyではSymfony Formsという機能を利用し、FormBuilder
を使ってフォームを定義します。例えば、以下のようにFormType
クラスを作成し、add()
メソッドでフィールドを追加します。
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\RadioType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
class ExampleFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('dropdown', ChoiceType::class, [
'choices' => [
'選択肢1' => 1,
'選択肢2' => 2,
],
])
->add('radio', ChoiceType::class, [
'choices' => [
'選択肢1' => 1,
'選択肢2' => 2,
],
'expanded' => true, // ラジオボタンとして表示
])
->add('checkbox', CheckboxType::class, [
'required' => false,
]);
}
}
このように、Symfony Formsではadd()
メソッドを使い、ChoiceType
やCheckboxType
などのクラスを指定してフォームを構築します。
各フォーム部品の実装にあたり
では実際に、ドロップダウンリスト(セレクトボックス)、ラジオボタン、チェックボックスを実装してみましょう。
これらのフォーム部品をadd
メソッドで実装するには、その第二引数にChoiceType::class
を指定します。
ChoiceType
を使うには、事前にuse
で読み込んでおく必要があります。
これを忘れるとエラーになるので、必ず最初に以下コードを記述しておきましょう。
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
ドロップダウンリスト(セレクトボックス)
add
メソッドを以下のように記述します。
->add('dropdown', ChoiceType::class, [
'choices' => [
'選択肢1' => 'Choice 1',
'選択肢2' => 'Choice 2',
'選択肢3' => 'Choice 3',
],
]);
choices
に渡す連想配列では、'表示させる内容' => value
の形で値をセットします。

add
メソッドの第三引数である配列にlabel
などのキーワードを追加することで、様々な属性を付与できます。
- label
-
フォームにラベルが付けられます。
- placeholder
-
初期表示する内容を指定できます。
- multiple
-
true
にすると複数選択ができるようになります。(デフォルトではfalse
)
実装例1(label & placeholder)
->add('dropdown', ChoiceType::class, [
'choices' => [
'選択肢1' => 'Choice 1',
'選択肢2' => 'Choice 2',
'選択肢3' => 'Choice 3',
],
'label' => 'メーカー名',
'placeholder' => '選択してください',
]);

実装例2(label & multiple)
->add('dropdown', ChoiceType::class, [
'choices' => [
'選択肢1' => 'Choice 1',
'選択肢2' => 'Choice 2',
'選択肢3' => 'Choice 3',
],
'label' => 'メーカー名',
'multiple' => true,
]);

【応用】選択肢をデータベースから取得する
ドロップダウンリストの選択肢を直接コードに記述するのではなく、データベースから取得して選ばせるということも可能です。コードを短くできることに加え、データベースが追加(削除)・更新されると自動的に選択肢も追加(削除)・更新されるため、データベースの内容と連携させたい場合には特にオススメです。
詳細は以下記事にて解説していますので、本記事と合わせてご覧ください。
ラジオボタン
add
メソッドを以下のように記述します。
->add('name', ChoiceType::class, [
'choices' => [
'選択肢1' => 'Choice 1',
'選択肢2' => 'Choice 2',
'選択肢3' => 'Choice 3',
],
'expanded' => true,
]);
第三引数の連想配列に、'expanded' => true
を追加します。(デフォルトではfalse
になっています。)choices
に渡す連想配列では、'表示させる内容' => value
の形で値をセットします。

add
メソッドの第三引数である配列に「label
」などのキーワードを追加することで、様々な属性を付与できます。
- label
-
フォームにラベルが付けられます。
- data
-
初期値を設定できます。(指定した選択肢をチェックした状態になります。)
実装例
ラベルにメーカー名を指定し、選択肢2をチェックした状態で表示する場合
->add('name', ChoiceType::class, [
'choices' => [
'選択肢1' => 'Choice 1',
'選択肢2' => 'Choice 2',
'選択肢3' => 'Choice 3',
],
'expanded' => true,
'label' => 'メーカー名',
'data' => 'Choice 2',
]);
チェックボックス
チェックボックスは、選択肢が単一か複数かで2つの実装方法があります。
選択肢が複数の場合
ドロップダウンリストやラジオボタンと同様、ChoiceType
を使って実装します。add
メソッドを以下のように記述します。
->add('name', ChoiceType::class, [
'choices' => [
'選択肢1' => 'Choice 1',
'選択肢2' => 'Choice 2',
'選択肢3' => 'Choice 3',
],
'expanded' => true,
'multiple' => true,
]);
第三引数の連想配列に、'expanded' => true
と'multiple' => true
を追加します。(デフォルトでは両方ともfalse
になっています。)choices
に渡す連想配列では、'表示させる内容' => value
の形で値をセットします。

選択肢が単一の場合
単独のチェックボックス(「利用規約に同意」のような)を実装する場合は、ChoiceType
ではなくCheckboxType
を使います。ChoiceType
同様、事前にuse
で読み込んでおく必要があるので、最初に以下コードを記述しておきましょう。
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
そのうえで、add
メソッドを以下のように記述します。
->add('name', CheckboxType::class, [
'label' => '利用規約に同意する',
'required' => false, // 必須にするなら true
]);

ChoiceTypeとCheckboxTypeの使い分け
タイプ | 使い方 | 用途 |
---|---|---|
ChoiceType | add(‘options’, ChoiceType::class, [‘expanded’ => true, ‘multiple’ => true]) | 複数選択可能なチェックボックスリスト |
CheckboxType | add(‘agree’, CheckboxType::class) | 単一のチェックボックス(同意ボタンなど) |
ChoiceType
で単一のチェックボックスを作ろうとして'multiple' => false
にすると、ラジオボタンになってしまいます。ラジオボタンの特性上、一度チェックを入れると外すことができないため、単一のチェックボックスを作る場合はCheckboxType
を使うのが正解です。- 逆に
CheckboxType
では、複数選択のチェックボックスを作ることはできません。
まとめ
以上、EC-CUBEで使われるSymfony Formsについて、ドロップダウンリスト(セレクトボックス)・ラジオボタン・チェックボックスの実装方法を紹介しました。いずれもよく使われるフォーム部品ですので、ぜひ実装方法をマスターしておきましょう。

