Skip to content

Commit 3bed218

Browse files
committed
feat(php-validation): Min max rules added
1 parent 385c6ec commit 3bed218

10 files changed

+74
-10
lines changed

Diff for: src/Rule/AbstractRule.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
abstract class AbstractRule
66
{
7-
abstract public function check($value);
7+
abstract public function check($value, $params = null);
88
abstract public function getMessage();
99
abstract public function getRuleName();
1010
}

Diff for: src/Rule/EmailRule.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class EmailRule extends AbstractRule
66
{
77
private $ruleName = 'email';
88

9-
public function check($value)
9+
public function check($value, $params = null)
1010
{
1111
return filter_var($value, FILTER_VALIDATE_EMAIL);
1212
}

Diff for: src/Rule/EmptyRule.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class EmptyRule extends AbstractRule
66
{
77
private $ruleName = 'empty';
88

9-
public function check($value)
9+
public function check($value, $params = null)
1010
{
1111
return empty($value);
1212
}

Diff for: src/Rule/MaxRule.php

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace Atakde\PhpValidation\Rule;
4+
5+
class MaxRule extends AbstractRule
6+
{
7+
private $ruleName = 'max';
8+
9+
public function check($value, $params = null)
10+
{
11+
return strlen($value) <= $params[0];
12+
}
13+
14+
public function getMessage()
15+
{
16+
return 'max rule is not valid';
17+
}
18+
19+
public function getRuleName()
20+
{
21+
return $this->ruleName;
22+
}
23+
}

Diff for: src/Rule/MinRule.php

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace Atakde\PhpValidation\Rule;
4+
5+
class MinRule extends AbstractRule
6+
{
7+
private $ruleName = 'min';
8+
9+
public function check($value, $params = null)
10+
{
11+
return strlen($value) >= $params[0];
12+
}
13+
14+
public function getMessage()
15+
{
16+
return 'min rule is not valid';
17+
}
18+
19+
public function getRuleName()
20+
{
21+
return $this->ruleName;
22+
}
23+
}

Diff for: src/Rule/NumericRule.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class NumericRule extends AbstractRule
66
{
77
private $ruleName = 'numeric';
88

9-
public function check($value)
9+
public function check($value, $params = null)
1010
{
1111
return is_numeric($value);
1212
}

Diff for: src/Rule/PasswordRule.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class PasswordRule extends AbstractRule
1616
{
1717
private $ruleName = 'password';
1818

19-
public function check($value)
19+
public function check($value, $params = null)
2020
{
2121
return preg_match('/^\S*(?=\S{8,})(?=\S*[a-z])(?=\S*[A-Z])(?=\S*[\d])\S*$/', $value);
2222
}

Diff for: src/Rule/RequiredRule.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class RequiredRule extends AbstractRule
66
{
77
private $ruleName = 'required';
88

9-
public function check($value)
9+
public function check($value, $params = null)
1010
{
1111
return isset($value);
1212
}

Diff for: src/Rule/StringRule.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class StringRule extends AbstractRule
66
{
77
private $ruleName = 'string';
88

9-
public function check($value)
9+
public function check($value, $params = null)
1010
{
1111
return is_string($value);
1212
}

Diff for: src/Validator.php

+21-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?php
22

33
namespace Atakde\PhpValidation;
4+
45
use Atakde\PhpValidation\Exception\InvalidRuleException;
56

67
class Validator
@@ -17,6 +18,8 @@ public function __construct()
1718
'email' => new Rule\EmailRule(),
1819
'password' => new Rule\PasswordRule(),
1920
'required' => new Rule\RequiredRule(),
21+
'max' => new Rule\MaxRule(),
22+
'min' => new Rule\MinRule()
2023
];
2124
}
2225

@@ -25,10 +28,13 @@ public function validate($rules, $params)
2528
foreach ($rules as $ruleField => $ruleString) {
2629
$ruleArray = explode('|', $ruleString);
2730
foreach ($ruleArray as $rule) {
28-
if (isset($this->validators[$rule])) {
31+
$ruleSettings = $this->parseRule($rule);
32+
33+
if (isset($this->validators[$ruleSettings['rule']])) {
2934
$checkValue = isset($params[$ruleField]) ? $params[$ruleField] : null;
30-
if (!$this->validators[$rule]->check($checkValue)) {
31-
$this->errors[$ruleField][] = $this->validators[$rule]->getMessage();
35+
36+
if (!$this->validators[$ruleSettings['rule']]->check($checkValue, $ruleSettings['params'])) {
37+
$this->errors[$ruleField][] = $this->validators[$ruleSettings['rule']]->getMessage();
3238
}
3339
} else {
3440
throw new InvalidRuleException('Rule ' . $rule . ' is not defined');
@@ -37,6 +43,18 @@ public function validate($rules, $params)
3743
}
3844
}
3945

46+
private function parseRule($rule)
47+
{
48+
$ruleSettings = explode(':', $rule);
49+
$ruleName = $ruleSettings[0];
50+
$ruleParams = isset($ruleSettings[1]) ? $ruleSettings[1] : null;
51+
52+
return [
53+
'rule' => $ruleName,
54+
'params' => [$ruleParams]
55+
];
56+
}
57+
4058
public function fails()
4159
{
4260
return count($this->errors) > 0;

0 commit comments

Comments
 (0)