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を用いると楽です。

| comment(0)

このエントリーのはてなブックマーク (-)