Skip to content

Commit 22e8164

Browse files
committed
Added nullable rule
Thanks to @Validation
1 parent 7cf62c5 commit 22e8164

File tree

4 files changed

+66
-0
lines changed

4 files changed

+66
-0
lines changed

src/Rules/Nullable.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
4+
namespace DG\Validation\Rules;
5+
6+
7+
use DG\Validation\Rule;
8+
9+
class Nullable extends Rule
10+
{
11+
/**
12+
* Check the $value is valid
13+
*
14+
* @param mixed $value
15+
* @return bool
16+
*/
17+
public function check($value): bool
18+
{
19+
return true;
20+
}
21+
}

src/Validation.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,10 @@ protected function validateAttribute(Attribute $attribute)
141141
$value = $this->getValue($attributeKey);
142142
$isEmptyValue = $this->isEmptyValue($value);
143143

144+
if ($attribute->hasRule('nullable') && $isEmptyValue) {
145+
$rules = [];
146+
}
147+
144148
$isValid = true;
145149
foreach ($rules as $ruleValidator) {
146150
$ruleValidator->setAttribute($attribute);

src/Validator.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ protected function registerBaseValidators()
161161
'digits_between' => new Rules\DigitsBetween,
162162
'defaults' => new Rules\Defaults,
163163
'default' => new Rules\Defaults, // alias of defaults
164+
'nullable' => new Rules\Nullable,
164165
];
165166

166167
foreach ($baseValidator as $key => $validator) {

tests/ValidatorTest.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1494,4 +1494,44 @@ public function testRuleUploadedFileInvalidMessages()
14941494
$expectedMessage = "The Sample file type must be 'jpeg', 'png', atau 'bmp'";
14951495
$this->assertEquals($validation->errors()->first('sample'), $expectedMessage);
14961496
}
1497+
1498+
public function testIgnoreNextRulesWithNullableRule()
1499+
{
1500+
$emptyFile = [
1501+
'name' => '',
1502+
'type' => '',
1503+
'size' => '',
1504+
'tmp_name' => '',
1505+
'error' => UPLOAD_ERR_NO_FILE
1506+
];
1507+
1508+
$invalidFile = [
1509+
'name' => 'sample.txt',
1510+
'type' => 'plain/text',
1511+
'tmp_name' => __FILE__,
1512+
'size' => 1000,
1513+
'error' => UPLOAD_ERR_OK,
1514+
];
1515+
1516+
$data1 = [
1517+
'file' => $emptyFile,
1518+
'name' => ''
1519+
];
1520+
1521+
$data2 = [
1522+
'file' => $invalidFile,
1523+
'name' => '[email protected]'
1524+
];
1525+
1526+
$rules = [
1527+
'file' => 'nullable|uploaded_file:0,500K,png,jpeg',
1528+
'name' => 'nullable|email'
1529+
];
1530+
1531+
$validation1 = $this->validator->validate($data1, $rules);
1532+
$validation2 = $this->validator->validate($data2, $rules);
1533+
1534+
$this->assertTrue($validation1->passes());
1535+
$this->assertFalse($validation2->passes());
1536+
}
14971537
}

0 commit comments

Comments
 (0)