Completed
Branch feature/pre-split (e801ec)
by Anton
03:11
created

AbstractChecker::getMessage()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 9
c 0
b 0
f 0
cc 2
eloc 5
nc 2
nop 1
rs 9.6666
1
<?php
2
/**
3
 * Spiral Framework.
4
 *
5
 * @license   MIT
6
 * @author    Anton Titov (Wolfy-J)
7
 */
8
namespace Spiral\Validation\Prototypes;
9
10
use Interop\Container\ContainerInterface;
11
use Spiral\Core\Component;
12
use Spiral\Core\Exceptions\ScopeException;
13
use Spiral\Core\Traits\SaturateTrait;
14
use Spiral\Translator\Traits\TranslatorTrait;
15
use Spiral\Validation\CheckerInterface;
16
use Spiral\Validation\Exceptions\CheckerException;
17
use Spiral\Validation\ValidatorInterface;
18
19
/**
20
 * Checkers used to group set of validation rules under one roof.
21
 *
22
 * Depends on container due it's usual implementation provides env specific operations in some cases
23
 */
24
abstract class AbstractChecker extends Component implements CheckerInterface
25
{
26
    use TranslatorTrait, SaturateTrait;
27
28
    /**
29
     * Default error messages associated with checker method by name.
30
     *
31
     * @var array
32
     */
33
    const MESSAGES = [];
34
35
    /**
36
     * @var ValidatorInterface
37
     */
38
    private $validator = null;
39
40
    /**
41
     * @var ContainerInterface
42
     */
43
    protected $container;
44
45
    /**
46
     * @param ContainerInterface $container Needed for translations and other things, saturated
47
     *
48
     * @throws ScopeException
49
     */
50
    public function __construct(ContainerInterface $container = null)
51
    {
52
        $this->container = $this->saturate($container, ContainerInterface::class);
53
    }
54
55
    /**
56
     * {@inheritdoc}
57
     */
58
    public function check(
59
        string $method,
60
        $value,
61
        array $arguments = [],
62
        ValidatorInterface $validator = null
63
    ) {
64
        array_unshift($arguments, $value);
65
66
        return call_user_func_array([$this, $method], $arguments);
67
    }
68
69
    /**
70
     * {@inheritdoc}
71
     */
72
    public function getMessage(string $method): string
73
    {
74
        $messages = static::MESSAGES;
75
        if (isset($messages[$method])) {
76
            return $this->say($messages[$method]);
77
        }
78
79
        return '';
80
    }
81
82
83
    /**
84
     * {@inheritdoc}
85
     */
86
    public function withValidator(ValidatorInterface $validator): CheckerInterface
87
    {
88
        $checker = clone $this;
89
        $checker->validator = $validator;
90
91
        return $checker;
92
    }
93
94
    /**
95
     * Currently active validator instance.
96
     *
97
     * @return ValidatorInterface
98
     */
99
    protected function getValidator(): ValidatorInterface
100
    {
101
        if (empty($this->validator)) {
102
            throw new CheckerException("Unable to receive associated checker validator");
103
        }
104
105
        return $this->validator;
106
    }
107
}