EntityTypeのCheckboxをデフォルトでCheckされた状態にする[Symfony]

SymfonyとDoctrineの記事になります。
私の環境の各バージョンは次の通りです。
Symfony 3.4
Doctrine 2.12

EntityからCheckboxを作成したときに、defaultの状態を選択された状態にしたいときの方法です。
EntityTypeだけでなく、他にもdefaultの値を設定したい場合に有効です。

EntityTypeからCheckboxを作成する

参考 : EntityType Field
今回はCheckboxですが、もちろんRadioやSelectも作成可能です。
Checkboxの場合は下記のようになります。
(FORM自体の詳細な作成方法は省略しています。Field情報の作成の仕方になります。)
(classのEntityの取得部分は開発環境に合わせて記述してください。)

use Symfony\Bridge\Doctrine\Form\Type\EntityType;
// ...

$builder->add('shop', EntityType::class, [
    'class' => 'AppBundle:Shop',
    'choice_label' => 'name',
    'expanded' => true,
    'multiple' => true,
]);

ちなみに、expandedmultipleを変更することで、Selectやradioを作ることが可能です。

Element Type Expanded Multiple
select tag false false
select tag (with multiple attribute) false true
radio buttons true false
checkboxes true true

EntityTypeからCheckboxをチェックされた状態にする方法

ページを開いた時の初期値(default)をチェックされた状態にします。

use Symfony\Bridge\Doctrine\Form\Type\EntityType;
// ...

$builder->add('shop', EntityType::class, [
    'class' => 'AppBundle:Shop',
    'choice_label' => 'name',
    'expanded' => true,
    'multiple' => true,
    'data' => $this->shopRepository->findAll(),
]);

dataを使用することで初期値(default)を設定することができます。
今回は「shop」のチェックボックスをすべて選択するために、shopRepositoryから全体を取得しています。
(リポジトリの取得部分は開発環境に合わせて記述してください。)

ちなみに、IDの1と5のショップだけチェックしたい場合は次のように記述します。

$this->shopRepository->findBy(['id' => [1,5]]),

 

まとめ

EntityTypeを使用したチェックボックスの作成について簡単に解説してみました。
より詳細な使い方は下記をご覧ください。
参考 : EntityType Field

Symfonyおすすめ書籍

あまり種類がないのと、そもそもフレームワークとして情報が膨大なので、入門でも結構読み応えがあります。
「PHPフレームワーク Symfony 4入門」