Posted at

Cakephp 2.x 自作のFormHelper

More than 1 year has passed since last update.

datepickerみたいなUIが普及した今となっては果たして存在意義があるのかどうかという感じだが、まあ、今でも日付入力に年と月と日で分けてselectにする人はいる。

で、CakephpのFormHelperも日付型のデータにはデフォルトで年月日分割selectになるようになっている。

そのカスタマイズ方法である。

まずMyFormHelperを作る。

場所はapp/View/Helper の中

classの中に今回自分がカスタマイズしたい部分を含むメソッドを丸ごとコピーする。


app/View/Helper/MyFormHelper.php

<?php

App::uses('FormHelper', 'View/Helper');

class MyFormHelper extends FormHelper {
public function dateTime($fieldName, $dateFormat = 'DMY', $timeFormat = '12', $attributes = array()) {

....

}

}
?>


で、改造部分を記述する。詳しくは参考サイトを参照


app/View/Helper/MyFormHelper.php

        if (is_array($separator)) {

$i = 0;
foreach($selects as $select) {
$opt .= $select . $separator[$i];
$i++;
}
} else {
$opt = implode($separator, $selects);
}

で、それを使うビューのコントローラに以下を追加。


app/Controller/NewsController.php

    public $helpers = array('Form' => array('className' => 'MyForm'));


あとはビューのinput部分を書き換え


app/View/News/add.ctp

<?php echo $this->Form->input('post_date', 

array(
'dateFormat' => 'YMD',
'minYear' => date("Y") -1,
'maxYear' => date("Y") + 4,
'monthNames' => false,
'div' => false,
'label' => false,
'separator' => array(
'<span>年</span>',
'<span>月</span>',
'<span>日</span>')
)
);
?>

まあ、でもこれはやる価値ある気持ちよさですよ。


参考