Merge pull request #140 from MaJerle/master

Added "optional" rule validation: with this rule if a value is provided it will be validated, even if it's an empty string
This commit is contained in:
Willem Wollebrants 2016-02-22 13:21:35 +01:00
commit 4112b40452
2 changed files with 30 additions and 1 deletions

View File

@ -731,6 +731,12 @@ class Validator
return $isInstanceOf;
}
//Validate optional field
protected function validateOptional($field, $value, $params) {
//Always return true
return true;
}
/**
* Get array of fields and data
*
@ -868,7 +874,9 @@ class Validator
list($values, $multiple) = $this->getPart($this->_fields, explode('.', $field));
// Don't validate if the field is not required and the value is empty
if ($v['rule'] !== 'required' && !$this->hasRule('required', $field) && (! isset($values) || $values === '' || ($multiple && count($values) == 0))) {
if ($this->hasRule('optional', $field) && isset($values)) {
//Continue with execution below if statement
} elseif ($v['rule'] !== 'required' && !$this->hasRule('required', $field) && (! isset($values) || $values === '' || ($multiple && count($values) == 0))) {
continue;
}

View File

@ -1085,6 +1085,27 @@ class ValidateTest extends BaseTestCase
),
);
}
public function testOptionalProvidedValid()
{
$v = new Validator(array('address' => 'user@example.com'));
$v->rule('optional', 'address')->rule('email', 'address');
$this->assertTrue($v->validate());
}
public function testOptionalProvidedInvalid()
{
$v = new Validator(array('address' => 'userexample.com'));
$v->rule('optional', 'address')->rule('email', 'address');
$this->assertFalse($v->validate());
}
public function testOptionalNotProvided()
{
$v = new Validator(array());
$v->rule('optional', 'address')->rule('email', 'address');
$this->assertTrue($v->validate());
}
}
function sampleFunctionCallback($field, $value, array $params) {