is it somehow possible to add additional rules to a model via behavior?
if my behavior is added to a model, I’ve to ensure a certain value format (a date in my case).
Thanks for your help
is it somehow possible to add additional rules to a model via behavior?
if my behavior is added to a model, I’ve to ensure a certain value format (a date in my case).
Thanks for your help
Behaviors can’t add rules to models directly (AFAIK), but you can implement beforeValidate() or afterValidate() method in your behavior, and use addError() if an attribute is invalid.
try this
in your model (or base model)
public function rules()
{
$rules = array( /* your rules */ );
//add all rules from attached behaviors
$behaviors = $this->behaviors();
foreach($behaviors as $key=>$behavior)
{
if( method_exists($this->{$key},'rules') )
$rules += $this->{$key}->rules();
}
return $rules;
}
and if you have extned models then
public function rules()
{
return array_merge(parent::rules(),array(
/* your rules for this extended model */
));
}
(caution) Properties should not be conflicted.
You can process like that:
In your Behavior overwrite the attach method:
/**
* Attach the behavior to the model.
* @param model $owner
*/
public function attach($owner) {
parent::attach($owner);
$owner = $this->getOwner();
$validators = $owner->getValidatorList();
$params = array('types' => 'jpg, jpeg, gif, png'); // etc
$validator = CValidator::createValidator('file', $owner, 'MyModel[attribute]',$params );
$validators->add($validator);
}