Merge pull request #14 from noginn/master

Added support for non-mandatory fields
This commit is contained in:
Vance Lucas 2013-06-19 15:01:34 -07:00
commit 13853d226c
2 changed files with 30 additions and 2 deletions

View File

@ -498,6 +498,11 @@ class Validator
foreach($v['fields'] as $field) { foreach($v['fields'] as $field) {
$value = isset($this->_fields[$field]) ? $this->_fields[$field] : null; $value = isset($this->_fields[$field]) ? $this->_fields[$field] : null;
// Don't validate if the field is not required and the value is empty
if ($v['rule'] !== 'required' && !$this->hasRule('required', $field) && $value == '') {
continue;
}
// Callback is user-specified or assumed method on class // Callback is user-specified or assumed method on class
if(isset(static::$_rules[$v['rule']])) { if(isset(static::$_rules[$v['rule']])) {
$callback = static::$_rules[$v['rule']]; $callback = static::$_rules[$v['rule']];
@ -511,9 +516,22 @@ class Validator
} }
} }
} }
return count($this->errors()) === 0; return count($this->errors()) === 0;
} }
/**
* Determine whether a field is being validated by the given rule.
*
* @param string $name The name of the rule
* @param string $field The name of the field
* @return boolean
*/
protected function hasRule($name, $field)
{
return isset($this->_validations[$name]) && in_array($field, $this->_validations[$name]['fields']);
}
/** /**
* Register new validation rule callback * Register new validation rule callback
*/ */

View File

@ -63,7 +63,7 @@ class ValidateTest extends \PHPUnit_Framework_TestCase
'email' => array('Email should be a valid email address') 'email' => array('Email should be a valid email address')
); );
$v = new Validator(array()); $v = new Validator(array('name' => '', 'email' => '$'));
$v->rule('required', 'name')->message('{field} is required'); $v->rule('required', 'name')->message('{field} is required');
$v->rule('email', 'email')->message('{field} should be a valid email address'); $v->rule('email', 'email')->message('{field} should be a valid email address');
@ -128,7 +128,7 @@ class ValidateTest extends \PHPUnit_Framework_TestCase
public function testDifferentInvalid() public function testDifferentInvalid()
{ {
$v = new Validator(array('test1' => 'test', 'test2' => 'test')); $v = new Validator(array('foo' => 'baz', 'bar' => 'baz'));
$v->rule('different', 'foo', 'bar'); $v->rule('different', 'foo', 'bar');
$this->assertFalse($v->validate()); $this->assertFalse($v->validate());
} }
@ -385,6 +385,16 @@ class ValidateTest extends \PHPUnit_Framework_TestCase
$this->assertFalse($v->validate()); $this->assertFalse($v->validate());
} }
/**
* @group issue-13
*/
public function testDateValidWhenEmptyButNotRequired()
{
$v = new Validator(array('date' => ''));
$v->rule('date', 'date');
$this->assertTrue($v->validate());
}
public function testDateFormatValid() public function testDateFormatValid()
{ {
$v = new Validator(array('date' => '2013-01-27')); $v = new Validator(array('date' => '2013-01-27'));