Exemplo n.º 1
0
 /**
  * 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;
 }
Exemplo n.º 2
0
 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());
 }