CakePHP2.x Formヘルパーコピペ用
CakePHP2.x Formヘルパーコピペ用(自分用)にメモっていくわよ
CakePHPのFormヘルパーがいつまでたっても覚えられないので、自分用にコピペ用にメモっていきたいと思います。(今後どんどん追記していこうかと)
使えるな〜と思ったらどうぞ使って下さい。なお、記法はPHP5.4以降のarray短縮構文です。
Form create
//フォームの書き出し(なお、デフォルトではmethodはpost)
echo $this->Form->create('User');
//postじゃなくて、methodをgetにしたい時
echo $this->Form->create('User', ['type' => 'get']);
//multipart/form-data(ファイルアップロード用のフォーム作成時に)
echo $this->Form->create('User', ['type' => 'file']);
//action先を任意で設定したい時
echo $this->Form->create('User', ['url' => ['controller' => 'search', 'action' => 'list']);
input type text
エラーも、ラベルもテキストフォームも一緒に表示したい時
//labelを変更したい時
echo $this->Form->input('name', ['label' => '名前']);
//フォームパーツを囲うdivタグが不要な時
echo $this->Form->input('name', ['label' => '名前', 'div' => false]);
dateフォーマット
何年〜何年までと期間指定出来ることと、monthNamesをfalseにすることで、Aprilなどの月表記を数字に出来る。
maxYearとminYearの設定で、何年〜何年までのプルダウンになります。dateの扱いはけっこう便利。
echo $this->Form->input('birthday', [
'dateFormat' => 'YMD',
'monthNames' => false,
'minYear' => date('Y') - 50,
'maxYear' => date('Y') - 13,
'separator' => array(' 年 ', ' 月 ', ' 日 '),
]);
radio
legendのfalseグループ化fieldsetを除去
$options = ['0' => '男性', '1' => '女性'];
$attributes = ['default' => '0','label' => false, 'legend' => false ];
echo $this->Form->radio('gender', $options, $attributes);
checkbox
チェックボックスが一つか、複数かで書き方は変わります。
//項目が複数
echo $this->Form->input('Model.field',
['type' => 'select',
'multiple' => 'checkbox',
'options' => $options,
'label' => false,
'div' => false,
'id'=> false]);
//〜に同意します などに使えるチェックボックス
echo $this->Form->input('registration', [
'type' => 'checkbox',
'label'=> false,
]);
Select
empty設定で、未選択状態を設定可能。
echo $this->Form->input( 'field', [
'empty' => '-----',
'label' => false,
'type' => 'select',
'options' => ['Cakes','Cookies']
]);
submit
echo $this->Form->end('変更');
まとめ
ひっさしぶりにしばらく別の仕事でZendFrameworkに関わっていたため、すっかりCakeのViewを忘れてしまいました。
特のFormヘルパーはすぐ忘れておたおたしちゃうんで、すぐコピペして使えるようにメモがてら残しておきたいと思います。
Formヘルパーを使うと余計なdivで囲われたり idが勝手に付与されたりするので、便利といえば便利なんですけど、時に邪魔な時はfalseを設定しましょう。
classを付与したい場合はclassを以下のように設定しますが、複数classを付与したい時はHTML同様、半角スペースを付けてあげれば複数classが設定出来ます。前にclass複数付与するにはこれも配列で渡すのかとおもってつまづいたことがあるので念のため。
echo $this->Form->input( 'field', [
'div' => false,
'label' => 'false',
'class' => 'class1 class2',
]);