Skip to content

Commit b76c866

Browse files
committed
Update optional rule to check if the field is present
1 parent 3521111 commit b76c866

File tree

5 files changed

+13
-5
lines changed

5 files changed

+13
-5
lines changed

src/Languages/en/validation.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,5 @@
4949
'minDim' => 'The {field} field requires an image having the minimum dimensions of {0} in width and {1} in height.',
5050
'dim' => 'The {field} field requires an image with the exact dimensions of {0} in width and {1} in height.',
5151
'specialChar' => 'The {field} field requires special characters.',
52-
'optional' => 'The {field} field is optional. If empty, validation passes.',
52+
'optional' => 'The {field} field is optional. If not present, validation passes.',
5353
];

src/Languages/es/validation.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,5 @@
4949
'minDim' => 'El campo {field} requiere una imagen que tenga las dimensiones mínimas de {0} de ancho y {1} de alto.',
5050
'dim' => 'El campo {field} requiere una imagen con las dimensiones exactas de {0} de ancho y {1} de alto.',
5151
'specialChar' => 'El campo {field} requiere caracteres especiales.',
52-
'optional' => 'El campo {field} es opcional. Si está vacío, la validación pasa.',
52+
'optional' => 'El campo {field} es opcional. Si no está presente, pasa la validación.',
5353
];

src/Languages/pt-br/validation.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,5 @@
4949
'minDim' => 'O campo {field} requer uma imagem que possua as dimensões mínimas de {0} de largura e {1} de altura.',
5050
'dim' => 'O campo {field} requer uma imagem com as dimensões exatas de {0} de largura e {1} de altura.',
5151
'specialChar' => 'O campo {field} requer caracteres especiais.',
52-
'optional' => 'O campo {field} é opcional. Se estiver vazio, a validação passa.',
52+
'optional' => 'O campo {field} é opcional. Se não estiver presente, a validação passa.',
5353
];

src/Validation.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ protected function validateField(string $field, array $rules, array $data) : boo
467467
foreach ($rules as $key => $rule) {
468468
if ($rule['rule'] === 'optional') {
469469
$ruleKey = $key;
470-
if (empty($data[$field])) {
470+
if ( ! \array_key_exists($field, $data)) {
471471
return true;
472472
}
473473
}

tests/ValidationTest.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,7 @@ public function testError() : void
477477
public function testOptional() : void
478478
{
479479
$this->validation->setRule('email', 'email');
480+
$this->validation->setRule('email2', 'optional|email');
480481
$this->validation->setRule('other', 'email');
481482
$this->validation->setRule('name', 'optional|minLength:5');
482483
$status = $this->validation->validate([
@@ -485,19 +486,26 @@ public function testOptional() : void
485486
]);
486487
self::assertTrue($status);
487488
self::assertNull($this->validation->getError('email'));
489+
self::assertNull($this->validation->getError('email2'));
488490
self::assertNull($this->validation->getError('other'));
489491
self::assertNull($this->validation->getError('name'));
490492
}
491493

492494
public function testOptionalAsLastRule() : void
493495
{
494496
$this->validation->setRule('email', 'email|optional');
497+
$this->validation->setRule('email2', 'email|minLength:5|optional');
495498
$this->validation->setRule('name', 'minLength:5|optional');
496499
$status = $this->validation->validate([
500+
'email' => '',
497501
'name' => 'Jon',
498502
]);
499503
self::assertFalse($status);
500-
self::assertNull($this->validation->getError('email'));
504+
self::assertStringContainsString(
505+
'The email field requires a valid email address.',
506+
$this->validation->getError('email')
507+
);
508+
self::assertNull($this->validation->getError('email2'));
501509
self::assertStringContainsString(
502510
'The name field requires 5 or more characters in length.',
503511
$this->validation->getError('name')

0 commit comments

Comments
 (0)