Validator type bug fix
This commit is contained in:
parent
2d5e8c4a84
commit
9c16da05bc
@ -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;
|
||||||
|
@ -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";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user