Skip to content

Commit 581e7ca

Browse files
committed
Add required_with_all rule
1 parent 44aca59 commit 581e7ca

File tree

3 files changed

+88
-29
lines changed

3 files changed

+88
-29
lines changed

src/Rules/RequiredWithAll.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
namespace Rakit\Validation\Rules;
4+
5+
use Rakit\Validation\Rule;
6+
7+
class RequiredWithAll extends Required
8+
{
9+
protected $implicit = true;
10+
11+
protected $message = "The :attribute is required";
12+
13+
public function fillParameters(array $params)
14+
{
15+
$this->params['fields'] = $params;
16+
return $this;
17+
}
18+
19+
public function check($value)
20+
{
21+
$this->requireParameters(['fields']);
22+
$fields = $this->parameter('fields');
23+
$validator = $this->validation->getValidator();
24+
$required_validator = $validator('required');
25+
26+
foreach($fields as $field) {
27+
if (!$this->validation->hasValue($field)) {
28+
return true;
29+
}
30+
}
31+
32+
$this->setAttributeAsRequired();
33+
return $required_validator->check($value, []);
34+
}
35+
36+
}

src/Validator.php

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -73,35 +73,36 @@ public function __invoke($rule)
7373
protected function registerBaseValidators()
7474
{
7575
$baseValidator = [
76-
'required' => new Rules\Required,
77-
'required_if' => new Rules\RequiredIf,
78-
'required_unless' => new Rules\RequiredUnless,
79-
'required_with' => new Rules\RequiredWith,
80-
'required_without' => new Rules\RequiredWithout,
81-
'email' => new Rules\Email,
82-
'alpha' => new Rules\Alpha,
83-
'numeric' => new Rules\Numeric,
84-
'alpha_num' => new Rules\AlphaNum,
85-
'alpha_dash' => new Rules\AlphaDash,
86-
'in' => new Rules\In,
87-
'not_in' => new Rules\NotIn,
88-
'min' => new Rules\Min,
89-
'max' => new Rules\Max,
90-
'between' => new Rules\Between,
91-
'url' => new Rules\Url,
92-
'ip' => new Rules\Ip,
93-
'ipv4' => new Rules\Ipv4,
94-
'ipv6' => new Rules\Ipv6,
95-
'array' => new Rules\TypeArray,
96-
'same' => new Rules\Same,
97-
'regex' => new Rules\Regex,
98-
'date' => new Rules\Date,
99-
'accepted' => new Rules\Accepted,
100-
'present' => new Rules\Present,
101-
'different' => new Rules\Different,
102-
'uploaded_file' => new Rules\UploadedFile,
103-
'before' => new Before,
104-
'after' => new After
76+
'required' => new Rules\Required,
77+
'required_if' => new Rules\RequiredIf,
78+
'required_unless' => new Rules\RequiredUnless,
79+
'required_with' => new Rules\RequiredWith,
80+
'required_without' => new Rules\RequiredWithout,
81+
'required_with_all' => new Rules\RequiredWithAll,
82+
'email' => new Rules\Email,
83+
'alpha' => new Rules\Alpha,
84+
'numeric' => new Rules\Numeric,
85+
'alpha_num' => new Rules\AlphaNum,
86+
'alpha_dash' => new Rules\AlphaDash,
87+
'in' => new Rules\In,
88+
'not_in' => new Rules\NotIn,
89+
'min' => new Rules\Min,
90+
'max' => new Rules\Max,
91+
'between' => new Rules\Between,
92+
'url' => new Rules\Url,
93+
'ip' => new Rules\Ip,
94+
'ipv4' => new Rules\Ipv4,
95+
'ipv6' => new Rules\Ipv6,
96+
'array' => new Rules\TypeArray,
97+
'same' => new Rules\Same,
98+
'regex' => new Rules\Regex,
99+
'date' => new Rules\Date,
100+
'accepted' => new Rules\Accepted,
101+
'present' => new Rules\Present,
102+
'different' => new Rules\Different,
103+
'uploaded_file' => new Rules\UploadedFile,
104+
'before' => new Before,
105+
'after' => new After
105106
];
106107

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

tests/ValidatorTest.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,28 @@ public function testRequiredWithoutRule()
219219
$this->assertTrue($v2->passes());
220220
}
221221

222+
public function testRequiredWithAllRule()
223+
{
224+
$v1 = $this->validator->validate([
225+
'b' => '',
226+
'a' => '1'
227+
], [
228+
'b' => 'required_with_all:a,c'
229+
]);
230+
231+
$this->assertTrue($v1->passes());
232+
233+
$v2 = $this->validator->validate([
234+
'a' => '1',
235+
'b' => '',
236+
'c' => '2'
237+
], [
238+
'b' => 'required_with_all:a,c'
239+
]);
240+
241+
$this->assertFalse($v2->passes());
242+
}
243+
222244
public function testRulePresent()
223245
{
224246
$v1 = $this->validator->validate([

0 commit comments

Comments
 (0)