CakePHPで日付選択フォームのカスタマイズ

スポンサーリンク

CakePHP3開発で、FormHelper で日付選択フォーム(セレクトメニュー)をカスタマイズする方法。以降の説明では、visit_date という datetime 型のカラムを作成済みとします。

— 環境 —
PHP 5.5.19
CakePHP 3.1.1

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

デフォルトでの FormHelper 使用

デフォルト状態で、datetime 型の属性に対して FormHelper の input メソッドを使った場合。

以下のように良い感じで、出力してくれます。

Screen Shot 2016-03-04 at 21.33.12

ただラベルや月の表示がアルファベットなので、ここを日本語と数字に修正したい。また、時刻の入力は必要ないので、年月日の入力のみにしたい。

オプションを指定してカスタマイズする

以下のようにオプションを指定しました。

こうした場合、表示は以下のようになる。

Screen Shot 2016-03-04 at 21.33.39

・label で表示するラベルを指定。
・dateFormat で YMD を指定。
・monthNames を false に指定すると、月が数字表示になる。
・maxYear, minYear で最小・最大の年を設定。
・empty は、非選択時の表示項目を指定。

こんな感じでオプションを指定してカスタマイズできます。datetime 型の日付選択フォーム用の、FormHelper に渡せるオプションのさらなる詳細は以下を参照。

Creating DateTime Inputs / Form – CakePHP Cookbook 3.x documentation

それぞれの選択メニューに、「年」「月」「日」と末尾に表示させたかったのだけど、これはオプション指定ではできなさそうでした。

調べたところ、既存の FormHelper メソッドをオーバーライドするか、FormHelper を継承したクラスで新たに独自のフォームヘルパーを作成すればできそう。これは後日の課題とします。

スポンサーリンク
私は Ruby on Rails の前は、PHP & CakePHP を使っていました(今も使いますけど)。PHP についてはオライリーの本を中心に軽く10冊以上は読み込みました。
 
スポンサーリンク

Leave Your Message!