CakePHP2.x Fromヘルパーのyear(),month()メソッド
他のinputメソッドと並べて使ったら、うまく値がとれなくて??調べてみると、year(), month()メソッドの場合には、生成される name属性の扱いが特別でarrayになるようです。
これは、同じ名前がページ内に複数配置されたりする事が多そうだからなのかな?最初は戸惑いますよね。
メソッド利用例
hogehoge1.ctp
<?php echo $this->Form->year('start') ?> <?php echo $this->Form->month('start') ?>
hogehoge1.ctp:レンダリングされたHTML
<select name="start[year]"> <option ...> <select name="start[month]"> <option ...>
year, month メソッドの引数
Cookbookよりも、ソースのメソッドコメントに詳細が記載ありました。
- year メソッド の attributes (第4引数)
- empty : ture の場合、"空のoption" を表示。文字列の場合、文字列を"空"として表示
- orderYear : 年の並び順番。'asc' と 'desc'(デフォルト) が指定できる
- value : selected な値
- month メソッド の attributes (第2引数)
- monthNames : false の場合、2桁の数字をテキスト(*1)の変わりに使う
- empty : ture の場合、"空のoption" を表示。文字列の場合、文字列を"空"として表示
- value : selected な値
(*1) 使用されるテキストは _generateOptions() メソッド中で定義されてました。
"__d('cake' ~" となってるので、i18nでcake.potを使って国際化してれば、翻訳できるみたいです。
<?php case 'month': if ($options['monthNames'] === true) { $data['01'] = __d('cake', 'January'); $data['02'] = __d('cake', 'February');
おまけ
input() の $fieldName が 'year' と 'month' を入れたときも、同じような動きをする?
hogehoge2.ctp
<?php echo $this->Form->input('year') ?> <?php echo $this->Form->input('month') ?>
hogehoge2.ctp:レンダリングされたHTML
<input name="year[year]"> <input name="month[month]">
参考
- CakePHPでFormヘルパーのyearを使った時のPOST値がarrayで来た(・ ・`
- Cookbook 2.x : Core Libraries > Helpers