RSS
 

Archive for 2月, 2008

フォームから配列で複数アイテムを使う

26 2月

CakePHP1.2ではフォームの作成にはhtmlヘルパーを使わず、
formヘルパーを使うようになった。
使い方は以下のような感じ。

< ?php
$form->create(’User’);
$form->input(’name’);
$form->end(’Submit’);
?>

1.1から移行した時はなんだか良く分からないなあと思うけど、
使っていくうちに$form->inputが色々出来ることに気付く。
誕生日なんかも$form->input(’birthday’, array(’type’ => ‘date’));
みたいな感じで出来るので面白い。
月が英語で出るのがやっかいだが。
例えば以下のようなデータ構造の場合。
User
- Item
- Item
- Item
このようにItemが複数ある場合もフォームで作れる。
もしかしたら1.2betaバージョン以降じゃないと駄目かもしれないが、
以下のように作成できる。

< ?php
$form->create(’User’);
$form->input(’name’);
$form->input(’Item/0/name’);
$form->input(’Item/1/name’);
$form->input(’Item/2/name’);
?>

これで
$this->data[’Item’]に複数のItemが入る。
色々出来るんだなあと思った。
後は、app_model.phpにそれようのバリデーション関数や
保存関数を加えておけばもっと便利に。

function insertList($rows) {
  foreach ($rows as $row) {
    $this->create($row);
    if (!$this->save()) return false;
  }
  return true;
}

みたいな感じ。

 
No Comments

Posted in CakePHP, php

 

userDefined

25 2月

CakePHPの1.2のバリデーションにuserDefinedというのがある。
これを利用すればフレームワークを汚さなくても
独自のバリデーションを加えることが可能。
具体的な使い方は以下の通り。
まずは特定のモデルもしくはapp_model.php等に
専用のバリデーション関数を追加する。
例えば以下のような関数。
function tel($data) {
return preg_match(’/¥d{2,4}-¥d{3,4}-¥d{4}/’) ? true : false;
}
そしてモデルのバリデーション設定には以下のように設定。
var $validate = array(
‘tel’ => array(’rule’ => array(’userDefined’, ‘User’, ‘tel’)),
);
配列の3つめに先ほどのtelを記入。
2番目はよく分からないけどモデル名を書いておけばよいと思う。
別のモデルのも使えるよと言うことだろうか。

ちなみに、モデル内にruleで指定するメソッドを定義しておけばそれでもいいらしい。

 
No Comments

Posted in CakePHP, php