Symfonyのマニュアルを読んでいたらフォームタイプのEntityTypeで面白いオプションがあったのでメモしておく。
group_by をフォームタイプ内で使用するとルールに基づいた値でグルーピングしてくれる。
下記の例はプルダウンの値をグルーピングする設定。(マニュアルの内容そのまま)
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
// ...
$builder->add('publishAt', ChoiceType::class, array(
'choices' => array(
'now' => new \DateTime('now'),
'tomorrow' => new \DateTime('+1 day'),
'1 week' => new \DateTime('+1 week'),
'1 month' => new \DateTime('+1 month'),
),
'choices_as_values' => true,
'group_by' => function($choiceValue, $key, $value) {
if ($choiceValue <= new \DateTime('+3 days')) {
return 'Soon';
} else {
return 'Later';
}
},
));
画面に出力すると<optgroup> タグを使用してグルーピングをしている。
<select id="info_publishAt" name="info[publishAt]" class="form-control">
<optgroup label="Soon">
<option value="0">now</option>
<option value="1">tomorrow</option>
</optgroup>
<optgroup label="Later">
<option value="2">1 week</option>
<option value="3">1 month</option>
</optgroup>
</select>
使い所わからないけど何か面白いのでメモ。