CakePHP
CakePHP1.2 「新規時のみ」or「更新時のみ」のバリデーション指定
0CakePHP1.2 からバリデーションがかなり強力になっていますが、レコードを追加するときまたはレコードを更新するときのみにバリデーションルールを適用する指定方法がありました。
var $validate = array( 'name' => array( 'required' => true, 'allowEmpty' => false, 'on' => 'update' 'message' => '名前を入力してください', ), );
第3回CakePHP勉強会
1第3回CakePHP勉強会 – events.php.gr.jp
第3回 CakePHP 勉強会が開催されるそうです。
日時:2008年06月27日(金)19:30 – 21:30
会場:トライコーン株式会社 1Fセミナールーム
地図
参加費用 無料
募集開始は6月2日(月) 13:00から開始します
CakePHP の開発を簡単にする 5 つの Tips
1“開発を便利にする5つのTips” フォーラム – CakePHP Users in Japan で紹介されていた記事です。
Make your life easier with these five CakePHP Quicktips ? Debuggable Ltd
1. prd という便利な関数を作成する
pr($someVar); die;
というコードをよく書くなら prd という関数を作ってしまえば、もっと楽できますね。
function prd($var) { pr($var); die; }
CakePHP1.2 で追加される3つのバリデーション
1次に公開される CakePHP 1.2 に3つのバリデーションが追加されるようです。
Three new validation rules – cakebaker
真偽値か
var $validate = array('is_enabled' => array('rule' => array('boolean')));
markItUp! を CakePHP で使用するヘルパー
0jQuery を使用したブラウザで使用できる高機能マークアップエディタ markItUp! で紹介した markItUP を CakePHP で使用するヘルパーが Bakery に紹介されていました。
markItUp! jQuery universal markup editor Helper | The Bakery, Everything CakePHP : Articles
元の記事のままやってみたのですが一部うまく動作しなかった部分がありましたので、実際に私がやった手順を紹介します。
(続きを読む…)
CakePHP1.2 安定版がもうすぐ出るようです
1CakePHP 1.2 stable coming soon | The Bakery, Everything CakePHP : Articles
The CakePHP team is gearing up to finally push out a stable 1.2 release! If you are following the trac timeline you can see that everybody is putting in huge amounts of work to fix bugs and get everything stable.
CakePHP 1.2 Form ヘルパーで input タグとエラーメッセージを別々に表示する方法
2CakePHP1.2 では Form ヘルパーの input メソッドでエラーメッセージを自動的に表示することが可能です。 自動的にエラーメッセージを表示するためには CakePHP1.2 のバリデーション で書いたようにモデルのバリデーションでエラーメッセージを設定しておきます。
/* モデルのバリデーション */ var $validate = array( 'email' => array( 'required' => array( 'rule'=>VALID_NOT_EMPTY , 'message' => '必須項目です' ), ); /* View の Form ヘルパー */ echo $form->input('User/email', array('type'=>'text'));
CakePHP1.2 バリデーションで共通ルールを作成するときに便利な userDefined
0CakePHP1.2 バリデーションのルールを調べているときに気になっていた Validation クラスにある userDefined に関して調べてみました。
cake/libs/validation.php
function userDefined($check, $object, $method, $args = null) { return call_user_func_array(array(&$object, $method), array($check, $args)); }
と定義されています。
call_user_func_array は PHP の関数で、関数やクラスのメソッドをコールすることができます。
つまり独自バリデーションがこれを使用して実装できるということです。
使用方法はモデルに以下のようにバリデーションを定義します。
var $validate = array( 'field' => array('rule' => array('userDefined', 'Model', 'method_name')), ); function method_name ($data) { /* バリデーションのチェック エラーなら false 、エラーなしなら true を返す */ }
ただこれだと下記のように書けるのであまりありがたみがない。
var $validate = array( 'field' => array('rule' => array('method_name'), );
何に使えばいいのかと考えたところ、クラス名、メソッド名が指定できるのでシステムで共通のバリデーションを設定するときに使えるのではと思いました。多分これが一番うれしいところではないかと思います。
※ただ、app_model.php に共通にしたいバリデーションチェック用のメソッド名を書けばそれでいけるような気もする。
CakePHP1.2 バリデーションのルール
2CakePHP1.2 のバリデーションのメモです。
詳しくは cake/libs/validation.php を見ると分かりやすいです。
半角英数字のみ
alphaNumeric
var $validate = array('field' => array('rule' => array('alphaNumeric')));
文字列の長さ
between
var $validate = array('field' => array('rule' => array('between', 6, 8)));
半角で6文字以上8文字以内
文字列が空
blank
var $validate = array('field' => array('rule' => array('blank')));
クレジットカード番号
cc
var $validate = array('field' => array('rule' => array('cc')));
比較
comparison
var $validate = array('field' => array('rule' => array('comparison', '>', 10)));
‘==’, ‘!=’, ‘< =’, など使用できる
正規表現
custom
var $validate = array('field' => array('rule' => array('custom', '/^[0-9]{3}\-[0-9]{4}$/')));
例として NNN-NNNN 形式の郵便番号のバリデーション
日付
date
var $validate = array('field' => array('rule' => array('date', 'ymd')));
‘dmy’, ‘mdy’, ‘ymd’, ‘dMy’, ‘Mdy’, ‘My’, ‘my’ が使用可
小数点の桁数チェック
decimal
var $validate = array('field' => array('rule' => array('decimal', 2)));
var $validate = array('field' => array('rule' => array('decimal', null, '/^[0-9]{2}\.[0-9]{2}$/')));
正規表現を指定してチェックすることも可。
メールアドレス
var $validate = array('field' => array('rule' => array('email')));
=== での比較
equalTo
var $validate = array('field' => array('rule' => array('equalTo', 'hoge')));
型も含めて等しいかチェック
拡張子
extension
var $validate = array('field' => array('rule' => array('extension', array('gif', 'jpg')));
ファイルの拡張子をチェック。許可したい拡張子を配列で指定。デフォルトは array(‘gif’, ‘jpeg’, ‘png’, ‘jpg’)
IPアドレス
ip
var $validate = array('field' => array('rule' => array('ip')));
最小文字数
minLength
var $validate = array('field' => array('rule' => array('minLength', 6)));
最大文字数
maxLength
var $validate = array('field' => array('rule' => array('maxLength', 12)));
数字
numeric
var $validate = array('field' => array('rule' => array('numeric')));
数字の範囲チェック
range
var $validate = array('field' => array('rule' => array('range', 0, 100)));
注意点は指定した数字は含まれない
上の例では 1?99 までが true
var $validate = array('field' => array('rule' => array('range')));
とすると有限数かどうかのチェック
URL
url
var $validate = array('field' => array('rule' => array('url')));
CakePHP1.2 モデルの generateList は非推奨メソッドなので find(’list’) を使用する
3CakePHP で select タグを作成する際に CakePHP1.1 ではモデルの generateList メソッドを使用しましたが、このメソッドは CakePHP1.2 では非推奨メソッドになっているようです。その代わりに find メソッドを使用します。
$this->Model->generateList();
と書く代わりに
$this->Model->find('list');
と書きます。
find メソッドのこの書き方は他に
- find(‘count’)
- レコード数を取得する。COUNT(*) の SQL を実行する
- find(‘first’)
- 最初のレコードを取得する。 LIMIT 1 で SQL を実行する
- find(‘all’)
- 全てのレコードを取得する。findAll と同等。
findAll は内部で find(‘all’) を実行している。
などがあります。