feat: Возможность добавлять правила валидации
This commit is contained in:
parent
9d730c2961
commit
2b021ffb61
1 changed files with 26 additions and 23 deletions
|
|
@ -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();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue