Skip to content

Commit

Permalink
Merge pull request #32452 from sileence/validates_array_with_keys
Browse files Browse the repository at this point in the history
[7.x]  Allow developers to specify accepted keys in array rule
  • Loading branch information
taylorotwell authored Apr 21, 2020
2 parents 3c9a67a + ceaf391 commit 0f8bf7e
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 2 deletions.
13 changes: 11 additions & 2 deletions src/Illuminate/Validation/Concerns/ValidatesAttributes.php
Original file line number Diff line number Diff line change
Expand Up @@ -317,11 +317,20 @@ public function validateAlphaNum($attribute, $value)
*
* @param string $attribute
* @param mixed $value
* @param array $parameters
* @return bool
*/
public function validateArray($attribute, $value)
public function validateArray($attribute, $value, $parameters = [])
{
return is_array($value);
if (! is_array($value)) {
return false;
}

if (empty($parameters)) {
return true;
}

return empty(array_diff_key($value, array_fill_keys($parameters, '')));
}

/**
Expand Down
17 changes: 17 additions & 0 deletions tests/Validation/ValidationValidatorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -672,6 +672,23 @@ public function testValidateArray()
$this->assertFalse($v->passes());
}

public function testValidateArrayKeys()
{
$trans = $this->getIlluminateArrayTranslator();
$rules = ['user' => 'array:name,username'];

$v = new Validator($trans, ['user' => ['name' => 'Duilio', 'username' => 'duilio']], $rules);
$this->assertTrue($v->passes());

// The array is valid if there's a missing key.
$v = new Validator($trans, ['user' => ['name' => 'Duilio']], $rules);
$this->assertTrue($v->passes());

// But it's not valid if there's an unexpected key.
$v = new Validator($trans, ['user' => ['name' => 'Duilio', 'username' => 'duilio', 'is_admin' => true]], $rules);
$this->assertFalse($v->passes());
}

public function testValidateFilled()
{
$trans = $this->getIlluminateArrayTranslator();
Expand Down

0 comments on commit 0f8bf7e

Please sign in to comment.