FormValidation::createFromPost()   B
last analyzed

Complexity

Conditions 4
Paths 4

Size

Total Lines 29
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 13
CRAP Score 4.0058

Importance

Changes 0
Metric Value
cc 4
eloc 14
nc 4
nop 2
dl 0
loc 29
ccs 13
cts 14
cp 0.9286
crap 4.0058
rs 8.5806
c 0
b 0
f 0
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: harry
5
 * Date: 3/8/18
6
 * Time: 3:37 PM
7
 */
8
9
namespace PluginSimpleValidate;
10
11
use PluginSimpleValidate\Exception\RuleNotExist;
12
use Zend\Diactoros\ServerRequest;
13
14
class FormValidation extends Validation implements \PluginSimpleValidate\Contracts\FormValidation
15
{
16
    const RULE_DELIMITER  = ',';
17
18
    const PARAM_DELIMITER  = ':';
19
20
    /**
21
     * @param ServerRequest $serverRequest
22
     * @param array $rules
23
     * @throws RuleNotExist
24
     */
25 1
    public function createFromPost(ServerRequest $serverRequest, $rules = [])
26
    {
27 1
        $body = $serverRequest->getParsedBody();
28
29 1
        foreach ($rules as $name => $values) {
30
31
            // create fields
32 1
            $field = new Field($name, $body[$name]);
33
34
            // rules list
35 1
            $rulesArr = array_filter(explode(self::RULE_DELIMITER, $values));
36
37 1
            foreach ($rulesArr as $rule) {
38
                // rule param list
39 1
                $paramArr = array_filter(explode(self::PARAM_DELIMITER, $rule));
40 1
                $ruleMethod = $paramArr[0];
41
42 1
                array_shift($paramArr);
43
44
                try {
45 1
                    call_user_func_array([$field, $ruleMethod], $paramArr);
46
                } catch (\Exception $exception) {
47 1
                    throw new RuleNotExist('wrong rule parameter');
48
                }
49
            }
50
51 1
            $this->addField($field);
52
        }
53
    }
54
}