public function testResult() { $result = new Result('foo', array('An error occured')); $this->assertEquals('foo', $result->getValue()); $this->assertEquals('An error occured', $result->getFirstError()); $result->setValue('bar'); $result->setErrors(array('Another error')); $result->addError('More errors'); $this->assertEquals('bar', $result->getValue()); $this->assertEquals('Another error', $result->getFirstError()); $this->assertFalse($result->isSuccessful()); $this->assertTrue($result->hasError()); $this->assertEquals('Another error, More errors', $result->__toString()); }
/** * Applies the $filter array containing PSX\FilterInterface on the $value. * Returns an result object which contains the value and error messages from * the filter. If $required is set to true an error will be added if $value * is null * * @param string $value * @param string $type * @param \PSX\FilterInterface[] $filters * @param string $title * @param boolean $required * @return \PSX\Validate\Result */ public function validate($value, $type = self::TYPE_STRING, array $filters = array(), $title = null, $required = true) { $result = new Result(); if ($title === null) { $title = 'Unknown'; } // we check whether the value is not null if ($required === true && $value === null) { $result->addError(sprintf('The field "%s" is not set', $title)); return $result; } if ($value !== null) { switch ($type) { case self::TYPE_INTEGER: $value = (int) $value; break; case self::TYPE_STRING: $value = (string) $value; break; case self::TYPE_FLOAT: $value = (double) $value; break; case self::TYPE_BOOLEAN: $value = (bool) $value; break; case self::TYPE_ARRAY: $value = (array) $value; break; case self::TYPE_OBJECT: if (!is_object($value)) { throw new InvalidArgumentException('Value must be an object'); } break; } } foreach ($filters as $filter) { $error = null; if ($filter instanceof FilterInterface) { $return = $filter->apply($value); $error = $filter->getErrorMessage(); } elseif (is_callable($filter)) { $return = call_user_func_array($filter, array($value)); } else { throw new InvalidArgumentException('Filter must be either an callable or instanceof PSX\\FilterInterface'); } if ($return === false) { if ($required === true) { if ($error === null) { $error = 'The field "%s" is not valid'; } $result->addError(sprintf($error, $title)); } return $result; } elseif ($return === true) { // the filter returns true so the validation was successful } else { $value = $return; } } $result->setValue($value); return $result; }