DEVELOPERS BLOGデベロッパーズブログ

  1. HOME > 
  2. 加藤 正人 > 
  3. タイトル

CakePHP3 の FormHelper::date() で初期値

2019/08/16

CakePHP3 の FormHelper::date() で初期値

 

CakePHP3 の Form ヘルパーの date() を使ってみて不便に思ったことがある。

date() ではオプション配列で 'value' に日付文字列 (例: '2019-05-06') を渡すことで各選択リストの項目を指定できるのだが、既定値以外の選択リストを指定しているとこの機能が動作しないようだ。例えば、「月」の選択リストを自前で用意して

 

01<?php $monthNames = [1 => '01', 2 => '02', ... , 12 => '12']; ?>
02<?= $this->Form->date("{$model_name}.{$fld}", [
03        'minYear' => date('Y') - 66,    // 66歳までを想定
04        'maxYear' => date('Y') - 18,    // 18歳以上を想定
05        'monthNames' => $monthNames,
06        'empty' => [
07            'year' => '-年-',
08            'month' => '-月-',
09            'day' => '-日-'
10        ],
11        'value' => '2001-01-23,
12        'year' => [
13            'class' => 'input_select',
14            'required' => true,
15        ],
16        'month' => [
17            'class' => 'input_select',
18            'required' => true,
19        ],
20        'day' => [
21            'class' => 'input_select',
22            'required' => true,
23        ],
24    ]), "n" ?>

のような使い方をすると、年と日は value に指定されている値で正しく選択リストの項目が選択されるが、月は empty 指定された項目になってしまう。

一方、date() のオプションで 'monthNames' => false として既定値のリストを使用すると正しく月選択リストも指定された月が選択される。

もしすると CakePHP 3.6.14 のバグ?

この記事は加藤 正人さんが書いています!

加藤 正人

氏名
加藤 正人
役職
多分SE
血液型
秘密
出没
美味しいもののあるところ
特色
タヒチ大好き。ちょいメタボ。