作業的・形式的に作るのと、実際の使用感を想像しながら作るのって違うなと強く感じた一つなのでまとめておきます。(ある意味こだわらなければすごいシンプルなのかもなーとか思ったり)
ここでは編集用のフォームを題材にします。主にViewのお話です。
CakePHPのFormヘルパー
edit.ctp
<div class="form-group col-xs-12">
<?= $this->Form->input('meeting_datetime', [
'label' => ['text' => '希望日', 'class' => 'col-xs-5'],
'type' => 'datetime',
'dateFormat' => 'YMD',
'timeFormat' => '24',
'monthNames' => false,
'separator' => array('年', '月', '日 '),
'empty' => '-',
'maxYear' => date('Y') + 1,
'minYear' => date('Y') - 3
]); ?>
</div>
これで手間取った部分を解消された、という話なのですが、少し細かく書いておきます。
- typeを「date」とか「datetime」とかで勝手にCakephp側で体裁を整えてくれる。
- ○○formatとかmonthNamesのところを調整すれば、月の英語表記や24時間表記とか上手く整えてくれる。
- separator(※これ後述します)をわかりやすく設定できる。
- maxとかminYearを指定してセレクトしやすいようにできる。
ライブラリをいじった
lib/Cake/View/Helper/FormHelper.phpを app/View/Helper/FormHelper.phpにコピーして、
app/View/Helper/FormHelper.php
$opt = implode($separator, $selects);
この部分を、
app/View/Helper/FormHelper.php
// $opt = implode($separator, $selects);
$opt = "";
$i = 0;
if (is_array($separator)) {
foreach($selects as $select) {
$opt .= $select.$separator[$i];
$i++;
}
} else {
$opt = implode($separator, $selects);
}
こんな感じに修正。
'separator' => '/' で年・月・日ごとに分けらんないと思ってたら行けたーという発見でした。