こんにちは!Symfonyアドベントカレンダー 21日目です :christmas_tree::crescent_moon:

今回は、Symfony4.4から新しく使えるようになったWeekType Fieldを使ってみようと思います。

WeekType Fieldとは?

<input type="week">に対応したFormTypeです。

そもそも、<input type="week">とは?

<input> 要素の week 型は、年と、その年の ISO 8601 週番号 (つまり、第1週から第52または53週) を簡単に入力することができる入力欄を生成します。

詳細は、MDNのドキュメントをご参照ください。https://developer.mozilla.org/ja/docs/Web/HTML/Element/Input/week

WeekType Fieldを使ってみる

<input type="week"> 自体よくわかっていないですが、とりあえず使ってみます。

デフォルトで使ってみる

  • src/Form/TaskType.php
class TaskType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('dueDate', WeekType::class, [
                'input' => 'array',         //default
                'widget' => 'single_text'   //default
            ])
            ->add('submit', SubmitType::class)
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Task::class
        ]);
    }
}

こんな感じで、カレンダーから選択できます!便利〜 :drooling_face:

input type="week"となっています!!!(GoogleChrome)

スクリーンショット 2019-12-20 10 06 49

オプションをいろいろ使ってみる

  • 'widget' => 'choice'<select>になります。(GoogleChrome)

スクリーンショット 2019-12-20 10 52 34

  • 'widget' => 'text'input type="number"になります。(GoogleChrome)

スクリーンショット 2019-12-20 10 37 47

最後に

使い所はパッと思いつきませんが、使えるところには使えそうですね :sweat_smile:(週単位の検索など)

ただ、ブラウザの互換性についてSafariやFirefoxに未対応だったりするので、'widget' => 'choice''widget' => 'text'を使うのが良さそうです。

参考

  • https://symfony.com/blog/new-in-symfony-4-4-week-form-type