CakePHP

 PHPのフレームワークCakePHPに新しいバージョンの1.3がリリースされました。以前のバージョンである1.1から1.2に変わった時はかなり大きな変更だったので、1.1から1.2へのアップデートは容易ではありませんでした。今回のバージョンではそれほど大きな変更は見受けられないのですが、今回、1.3を触っていてちょっと悩んでしまったことがありました。

 今までのCakePHPのFormヘルパーでは、時として、DivタグやLabelタグが邪魔だったりするので

<?php echo $form->text('Model.field', array('div'=>false, 'label'=>false)); ?>

として、表示させないようにしたり

<?php echo $form->text('Model.field', array('label'=>'ラベル名')); ?>

として、ラベルの名前を付けたりしたものです。

 しかし、1.3ではこの部分がちょっとだけ変わっていて、その「ちょっと」が私の少ない頭を悩ませることになりました。その詳細は以下に。

 今回私がやりたかったことは、下記ソースでDivタグありで、Labelタグをオリジナルの名前にしたかっただけです。

<?php
echo $form->create('Model', array('action'=>'edit'));
echo $form->text('Model.field', array('label'=>'ラベル名'));
echo $form->end('送信');
?>

 特に変な書き方はしていないと思うのですが、あっていますよね(;・_・ ) ( ・_・;)。これを実行すると下記のようなHTMLが生成されます。

<form id="ModelEditForm" method="post" action="/php/keitai_point/owner/models/edit" accept-charset="utf-8">
 <div style="display:none;">
  <input type="hidden" name="_method" value="POST" />
 </div>
 <input name="data[Model][field]" type="text" label="ラベル名" id="ModelField" />
 <div class="submit">
  <input type="submit" value="送信" />
 </div>
</form>

 見てもらうとわかるとおり、inputタグの前後にDivタグが無いのと、Labelタグがありません。確か、1.2ではこれで出たはずなのに出なくなっちゃいました。CakePHPをやっているとDivタグやLabelタグは邪魔なことが多いのでfalseを設定して外すのですが、1.3ではご親切にこれらタグを中止したのでしょうか?

 その後、いろいろ調べてみたところ、公式ドキュメントで下記ページを見つけました。

1.3 improvements :: フォーム :: 主要なヘルパー :: マニュアル :: 1.3コレクション :: The Cookbook

 このページの中で

echo $this->Form->input('username', array('label' => 'Username'));

となっています。CakePHPの場合、Formヘルパーのメソッドに「imput」を使用し、第2引数のオプション値に「Type」で種類を設定することができることを思い出しました。そこで、先ほどのソースを下記のように書き換えました。

<?php
echo $form->create('Model', array('action'=>'edit'));
echo $form->input('Model.field', array('type'=>'text', 'label'=>'ラベル名'));
echo $form->end('送信');
?>

 そしたら、ちゃんとDivタグとLabelタグが表示されました。

<form id="ModelEditForm" method="post" action="/php/keitai_point/owner/models/edit" accept-charset="utf-8">
 <div style="display:none;">
  <input type="hidden" name="_method" value="POST" />
 </div>
 <div class="input text">
  <label for="ModelField">ラベル名</label>
  <input name="data[Model][field]" type="text" id="ModelField" />
 </div>
 <div class="submit">
  <input type="submit" value="送信" />
 </div>
</form>

 旧バージョンではどちらでも使えたのであまり気にしなかったのですが、これからはinputメソッドで統一した方がいいですね。

 それと、先のリンクで気になったのが、下記の文章です。

In the past if you needed to use ‘div’ => false, or ‘label’ => false you would need to set those options on each and every call to input(). Instead in 1.3 you can declare a set of default options for input() with the inputDefaults key.

 これによるとCreateメソッドで「inputDefaults」をキーにし、’div’ => falseや’label’ => falseと書けば、DivタグやLabelタグをまとめて設定してくれるようです。今まで個別にDivタグなどの非表示設定を行っていたのが、一発で行えるようになったというのは嬉しい機能ですね。

CakePHP ポケットリファレンス (Pocket Reference)

価格¥2,980

順位318,270位

株式会社ブルーオーシャン 岡田 佳典

発行技術評論社

発売日2008/06/18

Amazonを開く

Supported by amazon Product Advertising API