読者です 読者をやめる 読者になる 読者になる

AWS / PHP / Python ちょいメモ

amazon web service , PHP, Python を使ったときのメモ。日本語でググってもわからなかった事を中心に。

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]">

確認環境

参考