Posts tagged validate
CakePHP モデルの validation の拡張 同じ項目で違うメッセージを出す
1CakePHP のモデルの validation の拡張のメモの続きです。
同じフォームの項目で違うエラーメッセージを出したいときがあります。
例えばユーザ登録フォームでユーザID がフォーマットエラーなのか、既に使用されているのかなどです。
models/users.php
var $validate = array( 'loginid' => '/^[0-9a-zA-Z]{8}$/', ); function validates($data=array()) { if(empty($data)) { $data = $this->data; } parent::validates($data); // loginid のユニークチェック if ($this->findByLoginid($data["User"]["loginid"])) { $this->invalidate("loginid_unique"); } if (count($this->validationErrors)>0) { return false; } else { return true; } }
既にloginid が登録済みの場合は
$this->invalidate('loginid_unique');
としています。
invalidate に指定するのは実際に存在しないものでも大丈夫なのでそれを使用して view でエラーメッセージを分けて表示します。
views/users/regist.thtml
ID:< ?php echo $html->password('User/loginid'); ?> < ?php echo $html->tagErrorMsg("User/loginid", "IDは英数字8文字で入力してください"); ?> < ?php echo $html->tagErrorMsg("User/loginid_unique", "IDは既に使用されています。他のID を指定してください"); ?>
CakePHP モデルの validation の拡張
1CakePHP のモデルの validation の拡張のメモです。
ユーザ登録フォームなどでパスワードの再確認のバリデーションを行うときの方法です。
views/users/regist.thtml
パスワード:< ?php echo $html->password('User/password'); ?> 確認用パスワード:< ?php echo $html->password('User/password2'); ?> < ?php echo $html->tagErrorMsg('User/password2', 'パスワードが一致しません');
※users テーブルにpassword2 のカラムはなくてかまいません。
models/users.php
function validates($data=array()) { if(empty($data)) { $data = $this->data; } parent::validates($data); if ($data["User"]["password"]!==$data["User"]["password2"]) { $this->invalidate("password2"); } if (count($this->validationErrors)>0) { return false; } else { return true; } }
AppModel クラスの validation メソッドも実行する必要があるので、必ず
parent::validates($data);
を書かないといけません。
OpenPNE PHP で作成したプログラムを組み込む
1OpenPNE PHP で作成したプログラムを組み込むときのメモです。
基本的に、/openpne/webapp_ext/ 以下に追加するファイルを置きます。
URLのパターン
OpenPNE の URL は下記のようになります。
- ?m=pc&a=page_hoge_foo
- ?m=pc&a=do_hoge_foo
携帯だと m=ktai とかになりますが、今回はPC のみ考えます。
page_hoge_foo のパターンはページを表示する
do_hoge_foo のパターンはモデルに対して処理を行う
page_hoge_foo でモデルに対して処理を行うこともできるが
MVC の意味がないかも。
?m=pc&a=do_hoge_foo のURL を追加する
/openpne/webapp_ext/modules/pc/do 以下に
hoge_foo.php を作成
hoge_foo.php
class pc_do_hoge_foo extends OpenPNE_Action { function execute($requests) { // ここに処理を書く } }
/openpne/webapp_ext/modules/pc/validate/do 以下に
hoge_foo.ini を作成
例えば ?m=pc&a=do_hoge_foo&id=10&no=20 のように id, no を GET で渡したい場合は
[id] type = "int" required = 1 [no] type = "int" required = 1
のように定義する。
こうしておくと do/hoge_foo.php 内で
$id = $requests["id"];
のようにバリデーションを通して値を取得できる。
?m=pc&a=page_hoge_foo のURL を追加する
/openpne/webapp_ext/modules/pc/page 以下に
hoge_foo.php を作成
hoge_foo.php
class pc_page_hoge_foo extends OpenPNE_Action { function execute($requests) { // ここに処理を書く } }
/openpne/webapp_ext/modules/pc/validate/page 以下に
hoge_foo.ini を作成
中身は do_hoge_foo の場合と同じ。
その他
/openpne/webapp_ext/lib
クラスファイルなどを置きました
自分で作成クラスをインクルードしたいときは /openpne/webapp_ext/lib
からインクルードします。