こちらも併せて御覧ください。
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