DAO&validateの意見を参考に更に自己流改良

Maple-user: 29のHawkさんやMaple-user: 37のtanakaさんの利用方法を自己流に解釈してみました。

$ cat DB/DataObject/Generator4Maple.php
<?php
include_once 'DB/DataObject/Generator.php';
class DB_DataObject_Generator4Maple extends DB_DataObject_Generator
{
function derivedHookVar(&$t,$padding)
{
$accessor = " function set". ucfirst($t->name) .
"(\${$t->name}) { \$this->{$t->name} = \${$t->name}; }\n";

$accessor.= " function get". ucfirst($t->name) .
"() { return \$this->{$t->name}; }\n";

$accessor.= " function staticGetWith". ucfirst($t->name) .
"(\${$t->name}) { return \$this->staticGet('$t->name', \$this->escape(\${$t->name})); }\n\n";
return $accessor;
}
}
?>

$ cat maple.ini
[Validate]
model_code.match = "1,商品番号は半角英数です,([\w\-]+)"
model_code.callback = "1,そのような商品はありません,ref:dbdo,findModel_code"

これによって、本処理に制御が移った時には商品番号が正しいことが確実に保証されるので、本処理ではエラー制御をほぼ書かずに良くなります。
コードの簡潔さに感動しました。




修正:
Generator4Maple.phpを変更しました。
DB_DataObjectは呼出毎に1回しかクエリーを発行できないのですね。はまりました。tanakaさんのサンプルでstaticGet()を使っているのはそのためのようです。ですので上のように変更しました。
また、会員登録時に会員IDやメールアドレスのように重複を許さない仕様は頻繁にあると思います。maple.iniでそれを制限できれば便利です。
そこで、tanakaさんが作成されたValidator_Callback.class.phpの判定条件を真逆に変更したValidator_Unlesscallback.class.phpというものを用意して、以下のようにmaple.iniで存在チェックをできるようにしました。

[Validate]
email.required = "0,メールアドレスを入力してください"
email.mail = "1,正しいメールアドレスを入力してください"
email.maxlength = "0,メールアドレスは128文字以内で入力してください。,128"
email.unlesscallback = "1,そのメールアドレスはすでに登録されています。,ref:dbdo,staticGetWithEmail"
nickname.unlesscallback = "1,その会員IDはすでに登録されています。,ref:dbdo,staticGetWithNickname"