[EC-CUBE3]フォームタイプで値をグルーピングする

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>

使い所わからないけど何か面白いのでメモ。

参考

EntityType Field -group_by-

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

one + eighteen =

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください