こちらも併せて御覧ください。
http://madroom-project.blogspot.com/2011/12/ormmodelobservers.html
前回の記事に書いたモデルにバリデーションを追加してみます。
http://madroom-project.blogspot.com/2011/11/ormmodel.html
\app\classes\model\twitter\user.php
namespace Model;
class Twitter_User extends \Orm\Model
{
protected static $_observers = array(
'Orm\Observer_CreatedAt' => array('before_insert'),
'Orm\Observer_UpdatedAt' => array('before_save'),
'Orm\Observer_Validation' => array('before_save'),
);
protected static $_properties = array(
'id',
'created_at',
'updated_at',
'user_id',
'twitter_user_id' => array(
'validation' => array(
'trim',
'required',
'max_length' => array(255),
'valid_string' => array('integer'),
),
),
'twitter_screen_name' => array(
'validation' => array(
'trim',
'required',
'max_length' => array(255),
'match_pattern' => array('/^([a-zA-Z0-9_])+$/'),
),
),
'twitter_oauth_token' => array(
'validation' => array(
'trim',
'required',
'max_length' => array(255),
'match_pattern' => array('/^([a-zA-Z0-9\-])+$/'),
),
),
'twitter_oauth_token_secret' => array(
'validation' => array(
'trim',
'required',
'max_length' => array(255),
'valid_string' => array('alpha_numeric'),
),
),
);
protected static $_belongs_to = array(
'user' => array(
'key_from' => 'user_id',
'model_to' => 'Model\User',
'key_to' => 'id',
'cascade_save' => false, // trueにすると一切の変更がない場合のsave()でエラーとなる。
'cascade_delete' => false, // trueにすると削除時に親も消してしまう。注意。
)
);
}match_patternの内容からrequired要らないじゃん。とかは、無しでお願いします。。。その他、ツイッタの認証情報に対する検証精度は保証出来ません。。。
ポイントは
* $_observersに'Orm\Observer_Validation' => array('before_save')を追加すること。
* $_propertiesにカラム毎の定義を書くこと。
の二点と思います。
尚、$_propertiesには、内部でしか使用しないidやcreated_atも書いておかないとエラーになりました。
バリデーションの細かな使い方は
\core\classes\validation.php
を見て、なんとなく確認しました。
で、気づいた方もいらっしゃるかと思いますが、各バリデーションに'trim'と書いています。
CodeIgniterでは、以下のような事がバリデーションで可能です。
http://codeigniter.jp/user_guide_ja/libraries/form_validation.html
> Note: また、 trim、htmlspecialchars、urldecode などの引数を1つだけとる
> PHP の組み込み関数をどれでも使用することができます。
FuelPHPでも見事、出来ました。
恐らく、書いた順に実行されるはずなので、md5する場合とかは、一番最後に書きましょう。
追記:
使い方を書いていなかったので、書いておきます。
$twitter_userは前述のTwitter_Userモデルです。
try
{
$twitter_user->save();
// TODO: 成功時の処理
}
catch (Orm\ValidationFailed $e)
{
// TODO: エラー時の処理(エラーメッセージは $e->getMessage() で取得可。)
}参考:
http://docs.fuelphp.com/packages/orm/creating_models.html
http://docs.fuelphp.com/packages/orm/observers/included.html
No comments:
Post a Comment