feat: Возможность добавлять правила валидации

This commit is contained in:
origami11@yandex.ru 2023-06-16 17:58:23 +03:00
parent 9d730c2961
commit 2b021ffb61

View file

@ -14,20 +14,7 @@ class Validator
{
protected $chain = array(); // Массив правил
protected $errorMsg = array(); // Массив ошибок
function __construct($rules = array()) {
$this->addRuleList($rules);
}
/**
* Добавление списка правил в специальном формате
* array(array('name' => fieldname, 'validate' => ruletext), ...)
* fieldname - Имя переменой для проверки
* ruletext - Описание правила см. формат правила ниже
*/
public function addRuleList(array $input)
{
$type = array(
protected $type = array(
'date' => 'ctiso\\Validator\\Rule\\Date',
'email' => 'ctiso\\Validator\\Rule\\Email',
'emaillist'=> 'ctiso\\Validator\\Rule\\EmailList',
@ -43,6 +30,22 @@ class Validator
'code' => 'ctiso\\Validator\\Rule\\Code'
);
function __construct($rules = array()) {
$this->addRuleList($rules);
}
function addRuleType($name, $className) {
$this->type[$name] = $className;
}
/**
* Добавление списка правил в специальном формате
* array(array('name' => fieldname, 'validate' => ruletext), ...)
* fieldname - Имя переменой для проверки
* ruletext - Описание правила см. формат правила ниже
*/
public function addRuleList(array $input)
{
// Разбор правила проверки
// Формат правила 'rule1|rule2,param1=value1|rule3,param1=value1,param2=value2'
foreach ($input as $value) {
@ -55,8 +58,8 @@ class Validator
$rule_param = explode(",", $rule);
$name = array_shift($rule_param);
if (isset($type[$name])) {
$constructor = $type[$name];
if (isset($this->type[$name])) {
$constructor = $this->type[$name];
$ruleObj = new $constructor($value['name'], false); // Нужны шаблонные сообщения для правил
if (isset($value['context'])) {
$ruleObj->setContext($value['context']);