All pastes #476910 Raw Edit

ShaXbee

public php v1 · immutable
·published 2007-05-08 11:25 UTC
rendered paste body
<?phpclass Validator {		protected $_errors;	protected $_fields;	protected $_validators;	public function __construct($extenders = null) {		$this->_errors = null;		$this->_fields = Array();		if($extenders !== null) {						if(is_array($extenders)) 				foreach($extenders as $extender)					$this->extend($extender);			else				$this->extend($extenders);		};	}	protected function addField($name, $validator, $args, $extender = null) {		$this->_fields[] = $field;	}	public function getErrors() {		return $this->_errors;	}	public function validate($data) {		$result = true;		$this->_errors = Array();		$isObject = is_object($data);		if(!is_array($data) && !is_object($data))			throw new Exception('Provided data type isn\'t array or object');		foreach($this->_fields as $field) {			$key = $field->name;			$result = $result && $this->callValidator($field->validator, $data[$isObject ? $data->$key : $data[$key], $field->args);		}		return $result;	}	protected function extend($extender) {		$reflection = new ReflectionClass($extender);		$object = $reflection->newInstance($this);		$this->_extenders[] = compact('reflection', 'instance');	}	protected function getExtender($name) {		if(!isset($this->_extenders[$name]))			$this->extend($name);		return $this->_extenders[$name];	}	protected function getMethod($name) {		$method = null;		$pos = strpos($name, '.');		if($pos !== false) {			$extender = $this->getExtender(substr($name, 0, $pos));			if($extender) {				$reflection = $extender['reflection'];				if($reflection->hasMethod($name))					$method = $reflection->getMethod($name);			}		} else {			reset($this->_extenders);			while($extender = next($this->_extenders) || $method) {				$reflection = $extender['reflection'];				if($reflection->hasMethod($name))					$method = $reflection->getMethod($name);			}		}		return $method ? Array('reflection' => $method, 'instance' => $extender['instance') : NULL;	}					protected function callValidator($name, $value, $args)		$method = $this->getMethod($name);		if(!$method)			throw new Exception('Cannot find ' . $name . ' validation method');		return $method['reflection']->invokeArgs($method['instance'], Array($value, $args));	}}?>