仕事でEC-CUBE3をメインに触っているのだが、最近フォーム周りの実装でつまづいたので備忘録としてメモしておく。

Chromeのオートコンプリート機能による問題

今回の問題は入力フォームのオートコンプリート(自動補完)機能に関することだ。

EC-CUBE3はSilexというPHPフレームワークを採用しており、ベースはSymfonyで作られているのでフォームの定義はTypeクラスに書くことになっている。

入力フォームの定義ファイルを見てもらおう。

$builder
	->add('date', 'text', array(
	    'label' => '日付',
	    'required' => true
	));

日付の入力を求めるフォームパーツの定義なのだが、フロント側でDatePickerを実装しており実際は以下のようなフォームとなる。

しかし、Chromeのオートコンプリート機能がONになっていると、以下のようにDatePickerで表示したカレンダーが隠れてしまう。

この問題を解決する。

はじめに試したこと

単純に以下のようにautocomplete属性を追加してみた。

$builder
	->add('date', 'text', array(
	    'label' => '日付',
	    'required' => true,
	    'autocomplete' => 'off',
	));

すると以下のエラーが発生。

The option “autocomplete” does not exist.

どうやらautocomplete属性はTypeクラスで使えないようだ。

解決策

ビューとなるTwig側にattr属性として設定してみた。

{{ form_widget(form.date, {"attr": {"class":"datepicker", "autocomplete":"off"}}) }}

これで無事に解決!

どうやらTwig側ではある程度自由な設定がおこなえるようだ。