I want to add additional attribute to ActiveRecord which is not present in database, but I want it only for validation.
Examples of use:
- We have a form for adding user and there should be password2 which should be validated by rule: [tt]array('password2', 'compare', 'compareAttribute'=>'password')[/tt].
- We want to add captcha to form which inserts a record to db.
-
How should I modify the model?
-
Should I use activeLabel and activePasswordField for "validating only" field like 'password2' ?
-
When should perform e.g. md5 hashing? maybe onBeforeSave?
I found the way to do this but it doesn't seem to be very elegant…
class User extends CActiveRecord
{
protected function afterConstruct()
{
$this->setAttribute('password2', '');
}
public function hasAttribute($name)
{
if($name == 'password2') return true;
return parent::hasAttribute($name);
}
and in Controler:
$user=new User;
if(isset($_POST['User']))
{
$user->attributes=$_POST['User'];
$user->setAttribute('password2', $_POST['User']['password2']);
if($user->save())
$this->redirect(array('list','id'=>$user->id));
}
Maybe there is simpler way to do this?