share my simple validator extension

code:




<?php


class PFuncValidator extends CValidator

{

    public $funcName;

    public $funcParams = array('{value}');

	public $allowEmpty=true;


	protected function validateAttribute($object,$attribute)

	{

		$value=$object->$attribute;

		if($this->allowEmpty && $this->isEmpty($value))

			return;

			

		$params = var_export($this->funcParams, true);

		$params = '$params='.strtr($params, array("'{value}'"=>'$value')).';';

		eval($params);

		$valid=call_user_func_array($this->funcName, $params);

		if(!$valid)

		{

			$message=$this->message!==null?$this->message:'{attribute} is invalidated';

			$this->addError($object,$attribute,$message);

		}

	}

}



usage:




    public function rules()

    {

        return array(

            //call is_array($value)

            array('xxxxx', 'ext.PFuncValidator', 'funcName'=>'is_array'),

            //call test(4, $value)

            array('xxxxx', 'ext.PFuncValidator', 'funcName'=>'test', 'funcParams'=>array(4, '{value}')),

            //call $obj->test($value);

            array('xxxxx', 'ext.PFuncValidator', 'funcName'=>array($obj, 'test'), 'message'=>'xxxxxxxxxxxxx'),

        );

    }



good job!