1
0
mirror of synced 2025-02-22 15:13:13 +03:00

Validator type bug fix

This commit is contained in:
doctrine 2006-06-11 12:02:05 +00:00
parent 2d5e8c4a84
commit 9c16da05bc
2 changed files with 105 additions and 6 deletions

View File

@ -154,11 +154,16 @@ class Doctrine_Validator {
break; break;
} }
} }
/**
if(self::gettype($value) !== $column[0] && self::gettype($value) != 'NULL') { if(self::gettype($value) !== $column[0] && self::gettype($value) != 'NULL') {
$err[$key] = Doctrine_Validator::ERR_TYPE; $err[$key] = Doctrine_Validator::ERR_TYPE;
continue; continue;
} }
*/
if( ! self::isValidType($value, $column[0])) {
$err[$key] = Doctrine_Validator::ERR_TYPE;
continue;
}
} }
if( ! empty($err)) { if( ! empty($err)) {
@ -184,6 +189,32 @@ class Doctrine_Validator {
public function getErrorStack() { public function getErrorStack() {
return $this->stack; return $this->stack;
} }
/**
* returns whether or not the given variable is
* valid type
*
* @param mixed $var
* @param string $type
* @return boolean
*/
public static function isValidType($var, $type) {
$looseType = self::gettype($var);
switch($looseType):
case 'float':
case 'double':
case 'integer':
if($type == 'string' || $type == 'float')
return true;
case 'string':
case 'array':
case 'object':
return ($type === $looseType);
break;
case 'NULL':
return true;
break;
endswitch;
}
/** /**
* returns the type of loosely typed variable * returns the type of loosely typed variable
* *
@ -193,10 +224,13 @@ class Doctrine_Validator {
public static function gettype($var) { public static function gettype($var) {
$type = gettype($var); $type = gettype($var);
switch($type): switch($type):
case "string": case 'string':
if(preg_match("/^[0-9]+$/",$var)) return "integer"; if(preg_match("/^[0-9]+$/",$var))
elseif(is_numeric($var)) return "float"; return 'integer';
else return $type; elseif(is_numeric($var))
return 'float';
else
return $type;
break; break;
default: default:
return $type; return $type;

View File

@ -4,6 +4,71 @@ class Doctrine_ValidatorTestCase extends Doctrine_UnitTestCase {
$this->tables[] = "Validator_Test"; $this->tables[] = "Validator_Test";
parent::prepareTables(); parent::prepareTables();
} }
public function testIsValidType() {
$var = "123";
$this->assertTrue(Doctrine_Validator::isValidType($var,"string"));
$this->assertTrue(Doctrine_Validator::isValidType($var,"integer"));
$this->assertTrue(Doctrine_Validator::isValidType($var,"float"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"array"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"object"));
$var = 123;
$this->assertTrue(Doctrine_Validator::isValidType($var,"string"));
$this->assertTrue(Doctrine_Validator::isValidType($var,"integer"));
$this->assertTrue(Doctrine_Validator::isValidType($var,"float"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"array"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"object"));
$var = 123.12;
$this->assertTrue(Doctrine_Validator::isValidType($var,"string"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"integer"));
$this->assertTrue(Doctrine_Validator::isValidType($var,"float"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"array"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"object"));
$var = '123.12';
$this->assertTrue(Doctrine_Validator::isValidType($var,"string"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"integer"));
$this->assertTrue(Doctrine_Validator::isValidType($var,"float"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"array"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"object"));
$var = '';
$this->assertTrue(Doctrine_Validator::isValidType($var,"string"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"integer"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"float"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"array"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"object"));
$var = null;
$this->assertTrue(Doctrine_Validator::isValidType($var,"string"));
$this->assertTrue(Doctrine_Validator::isValidType($var,"integer"));
$this->assertTrue(Doctrine_Validator::isValidType($var,"float"));
$this->assertTrue(Doctrine_Validator::isValidType($var,"array"));
$this->assertTrue(Doctrine_Validator::isValidType($var,"object"));
$var = 'str';
$this->assertTrue(Doctrine_Validator::isValidType($var,"string"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"integer"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"float"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"array"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"object"));
$var = array();
$this->assertFalse(Doctrine_Validator::isValidType($var,"string"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"integer"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"float"));
$this->assertTrue(Doctrine_Validator::isValidType($var,"array"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"object"));
$var = new Exception();
$this->assertFalse(Doctrine_Validator::isValidType($var,"string"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"integer"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"float"));
$this->assertFalse(Doctrine_Validator::isValidType($var,"array"));
$this->assertTrue(Doctrine_Validator::isValidType($var,"object"));
}
public function testValidate2() { public function testValidate2() {
$test = new Validator_Test(); $test = new Validator_Test();
$test->mymixed = "message"; $test->mymixed = "message";