LoginSignup
1
2

More than 5 years have passed since last update.

CakePHP 2系のFormヘルパーの小ネタ(separatorらへん)

Posted at

作業的・形式的に作るのと、実際の使用感を想像しながら作るのって違うなと強く感じた一つなのでまとめておきます。(ある意味こだわらなければすごいシンプルなのかもなーとか思ったり)
ここでは編集用のフォームを題材にします。主に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>

こんな感じ。一行目のやつを作るのに色々調べました。
スクリーンショット 2016-11-08 14.58.32.png

これで手間取った部分を解消された、という話なのですが、少し細かく書いておきます。

  • 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' => '/' で年・月・日ごとに分けらんないと思ってたら行けたーという発見でした。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2