May 7
逆引きrhaco26: テーブルへの変更時に値を検証する(verify)
rhacoはproject.xmlで入力内容の形式を指定することが出来るので、その範囲で入力チェックをする場合は問題ありません。
(逆引きrhacoその25、その24を参照)
ただし、複雑な入力チェックをする場合もあり、その場合は以下の方法でチェックを行います。
1. verifyメソッドを書く
2. beforeInsert、beforeUpdateを書く
例として、以下のproject.xmlで構成するモデルに「製品名がP-で始まる場合は価格が必須」というチェック条件を追加します。
project.xml
<project rhacover="1.4.0" version="1.0.0" name="rhacotest" xmlns="http://rhaco.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://rhaco.org http://media.rhaco.org/project.xsd"> <database name="test" renew="true"> <table name="Product" admin="true"> <column name="id" /> <column name="name" label="製品名"></column> <column name="price" type="integer" label="価格"></column> </table> </database> </project>
セットアップを行うと生成されるlibrary/model/Product.phpに追加していきます。
1.verifyメソッドを書く
function verify(&$db){
if(strpos($this->getName(),'P-')===0 && empty($this->getPrice())){
return false;
}
return true;
}
verifyの場合チェックを全て通過したらtrueを返し、チェックに通らなければfalseを返します。
2.beforeUpdateやbeforeInsertメソッドを書く
function beforeUpdate(&$db){
if(strpos($this->getName(),'P-')===0 && empty($this->getPrice())){
return false;
}
}
beforeUpdateの場合はチェックを通らなかった時のみfalseを返します。チェックを通った時何も返す必要はありません。
beforeInsertの場合も同様です。
beforeUpdate, beforeInsert, beforeDeleteを使うことで、追加、修正、削除時それぞれで違う入力チェック方法を用いることが出来ます。
また、全て同じ入力チェック法を用いる場合は、verifyを用いると楽です。
このエントリーのはてなブックマーク (