Tags
Recent Comments
Elsewhere
Lousy day n now I am stuck in the car where I can't reverse and the car in front is freaking near.
Original French toast? (@@ octa hotel cafe @@ parco millenia walk) http://4sq.com/aigDMr
No work! Resisting the urge to check my mails. ~~~ (@@ Aerin's @@ Raffles City) http://4sq.com/aGpTYp
Still the best ra-men IMO (@@ Marutama Ramen @@ Liang Court w/ @berilyn) http://4sq.com/58Yssg
Read: LINK: Managing Conflict http://bit.ly/aVrjIG
Bookmarked a link: Sync & Backup Files to the Cloud - Access Online with Any Device ...
RT @jerictan: 陳傑瑞 《我不相信》MV 首播網路版 - 《荒島愛》 電影主題曲 http://fb.me/z5Vo4y8L
I'm at Coffee Club (Holland Village, 48A Lorong Mambong, Singapore). http://4sq.com/8NF3Am
OK girls, it's actually a contest but first 50 entries get S$80 cash! :p I will vote for you! http://bit.ly/c3q8LQ @evonnz @Yee_Ann @Rejinaa
Anyone keen on Free hair colour, treatment and styling?
Links
Multiple Validation Sets in CakePHP
Jonathon Snook wrote about multiple validation sets in CakePHP and it reminded me how often we require rather different sets of validation rules for a single model. I have always enjoyed learning how others approached similar problems so I think I shall share mine too.
A very relevant example is the User model where we usually have multiple forms associated. E.g. sign up, profile updates, password reset, etc. Each form have a different set of fields while some share the same fields. My approach is to select a different set of fields for each “action” and modify the rules if required. This means I’ll keep a master set of rules for all the User model fields and call
setValidate()for each “action”./** * Set the default validation rules here. * * @var array */ protected $_validate = array( 'username' => array( 'empty' => array( 'required' => true, 'rule' => VALID_NOT_EMPTY, 'last' => true ), 'invalid' => array( 'rule' => '/^[\w]{3,30}$/', 'last' => true, 'on' => 'create' ), 'exists' => array( 'rule' => 'validateUniqueUsername', 'last' => true, 'on' => 'create' ) ), 'password' => array( 'empty' => array( 'required' => true, 'rule' => VALID_NOT_EMPTY, 'last' => true ), 'invalid' => array( 'required' => true, 'rule' => '/^.{6,30}$/', 'last' => true ) ), ... ); /** * Sets just enough fields for validation. * * @param array $fields List of field names to validate against. If no param * passed, all fields will be included. * @author Derick */ function setValidate($fields = null) { if ($fields === null) { $this->validate = $this->_validate; } else { $this->validate = array(); foreach ($fields as $f) { if (isset($this->_validate[$f])) { $this->validate[$f] = $this->_validate[$f]; } } } }This is a simplified example in my User model where I have the
register()function to validate only the fields required for sign up and theupdateProfile()function which uses another set of fields with slight different requirement.function register($data) { $fields = array('username', 'password', ...); $this->setValidate($fields); $this->save($data, true, $fields); } function updateProfile($data) { $fields = array('password', ...); $this->setValidate($fields); // derick: allow user to left password field empty unset($this->validate['password']['empty']); $this->validate['password']['invalid']['allowEmpty'] = true; $this->save($data, true, $fields); // derick: you can also call this again to "reset" to the default set of // rules but usually we don't need this $this->setValidate(); }In other words, I only update the
$validatearray in the model when required. Some might think it is dangerous since there is a chance of saving data without validation but this works for me. What do the rest of you do?