Credentials::validate()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 14
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 9
c 1
b 0
f 0
nc 3
nop 1
dl 0
loc 14
rs 9.9666
1
<?php
2
3
namespace alekciy\ofd;
4
5
use Exception;
6
use InvalidArgumentException;
7
use Valitron\Validator;
8
9
/**
10
 * Базовый класс для задания реквизитов доступа у конкретных провайдеров.
11
 */
12
abstract class Credentials
13
{
14
	/** @var string Имя домена на котором находится API */
15
	public $domain = '';
16
17
	/**
18
	 * Имя домена на котором находится API.
19
	 *
20
	 * @param string $domain
21
	 */
22
	public function __construct(string $domain)
23
	{
24
		$this->domain = $domain;
25
	}
26
27
	/**
28
	 * Правила валидации в виде массива:
29
	 *   ключ - имя проверяемого свойства объекта;
30
	 *   значение - массив с правилами валидации.
31
	 * Например, свойство domain является обязательным для заполнения: ['domain', ['required']]
32
	 *
33
	 * @see https://github.com/vlucas/valitron#built-in-validation-rules
34
	 * @return array
35
	 */
36
	abstract protected function getRuleList(): array;
37
38
	/**
39
	 * Выполнить проверку корректности реквизитов доступа.
40
	 *
41
	 * @param string $lang Язык на котором выводятся сообщения с ошибками валидации.
42
	 * @return void
43
	 * @throws Exception
44
	 * @throws InvalidArgumentException
45
	 */
46
	public function validate($lang = 'ru')
47
	{
48
		Validator::lang($lang);
49
		$validator = new Validator(get_object_vars($this));
50
		// Задаем правила валидации
51
		$validator->mapFieldRules('domain', ['required']);
52
		// Правила валидации дочерних классов
53
		$validator->mapFieldsRules($this->getRuleList());
54
		if (!$validator->validate()) {
55
			$messageList = [];
56
			foreach ($validator->errors() as  $propertyName => $errorList) {
57
				$messageList[] = $propertyName . ': ' . implode(', ', $errorList);
58
			}
59
			throw new Exception(implode('. ', $messageList));
60
		}
61
	}
62
}
63