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

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

View file

@ -3,7 +3,7 @@
///<reference path="Rule/Notnull.php"/> ///<reference path="Rule/Notnull.php"/>
/** /**
* Проверка коллекции * Проверка коллекции
*/ */
namespace ctiso\Validator; namespace ctiso\Validator;
use Exception, use Exception,
@ -14,35 +14,38 @@ class Validator
{ {
protected $chain = array(); // Массив правил protected $chain = array(); // Массив правил
protected $errorMsg = array(); // Массив ошибок protected $errorMsg = array(); // Массив ошибок
protected $type = array(
'date' => 'ctiso\\Validator\\Rule\\Date',
'email' => 'ctiso\\Validator\\Rule\\Email',
'emaillist'=> 'ctiso\\Validator\\Rule\\EmailList',
'match' => 'ctiso\\Validator\\Rule\\MatchRule',
'time' => 'ctiso\\Validator\\Rule\\Time',
'alpha' => 'ctiso\\Validator\\Rule\\Alpha',
'require' => 'ctiso\\Validator\\Rule\\Notnull',
'numeric' => 'ctiso\\Validator\\Rule\\Numeric',
'unique' => 'ctiso\\Validator\\Rule\\Unique',
'filename' => 'ctiso\\Validator\\Rule\\FileName',
'count' => 'ctiso\\Validator\\Rule\\Count',
'isfile' => 'ctiso\\Validator\\Rule\\IsFile',
'code' => 'ctiso\\Validator\\Rule\\Code'
);
function __construct($rules = array()) { function __construct($rules = array()) {
$this->addRuleList($rules); $this->addRuleList($rules);
} }
function addRuleType($name, $className) {
$this->type[$name] = $className;
}
/** /**
* Добавление списка правил в специальном формате * Добавление списка правил в специальном формате
* array(array('name' => fieldname, 'validate' => ruletext), ...) * array(array('name' => fieldname, 'validate' => ruletext), ...)
* fieldname - Имя переменой для проверки * fieldname - Имя переменой для проверки
* ruletext - Описание правила см. формат правила ниже * ruletext - Описание правила см. формат правила ниже
*/ */
public function addRuleList(array $input) public function addRuleList(array $input)
{ {
$type = array(
'date' => 'ctiso\\Validator\\Rule\\Date',
'email' => 'ctiso\\Validator\\Rule\\Email',
'emaillist'=> 'ctiso\\Validator\\Rule\\EmailList',
'match' => 'ctiso\\Validator\\Rule\\MatchRule',
'time' => 'ctiso\\Validator\\Rule\\Time',
'alpha' => 'ctiso\\Validator\\Rule\\Alpha',
'require' => 'ctiso\\Validator\\Rule\\Notnull',
'numeric' => 'ctiso\\Validator\\Rule\\Numeric',
'unique' => 'ctiso\\Validator\\Rule\\Unique',
'filename' => 'ctiso\\Validator\\Rule\\FileName',
'count' => 'ctiso\\Validator\\Rule\\Count',
'isfile' => 'ctiso\\Validator\\Rule\\IsFile',
'code' => 'ctiso\\Validator\\Rule\\Code'
);
// Разбор правила проверки // Разбор правила проверки
// Формат правила 'rule1|rule2,param1=value1|rule3,param1=value1,param2=value2' // Формат правила 'rule1|rule2,param1=value1|rule3,param1=value1,param2=value2'
foreach ($input as $value) { foreach ($input as $value) {
@ -55,8 +58,8 @@ class Validator
$rule_param = explode(",", $rule); $rule_param = explode(",", $rule);
$name = array_shift($rule_param); $name = array_shift($rule_param);
if (isset($type[$name])) { if (isset($this->type[$name])) {
$constructor = $type[$name]; $constructor = $this->type[$name];
$ruleObj = new $constructor($value['name'], false); // Нужны шаблонные сообщения для правил $ruleObj = new $constructor($value['name'], false); // Нужны шаблонные сообщения для правил
if (isset($value['context'])) { if (isset($value['context'])) {
$ruleObj->setContext($value['context']); $ruleObj->setContext($value['context']);
@ -81,7 +84,7 @@ class Validator
$this->chain[] = $rule; $this->chain[] = $rule;
} }
} }
public function skip($rule/*: AbstractRule*/, $container/*: Collection*/) // -> Rule_Abstract public function skip($rule/*: AbstractRule*/, $container/*: Collection*/) // -> Rule_Abstract
{ {
if ($rule->skipEmpty()) { if ($rule->skipEmpty()) {
@ -90,10 +93,10 @@ class Validator
$value = trim($data); $value = trim($data);
return $value == ''; return $value == '';
} }
} }
return false; return false;
} }
public function validate(Collection $container, $rule = null, $status = null) public function validate(Collection $container, $rule = null, $status = null)
{ {
$fields = array(); $fields = array();