<?php
namespace System\Validation;
use System\Core;
class Validator {
private $config;
private $rules;
private $error;
public function __construct($rules) { // Для каждой формы, свой экземпляр (new Validator($rules))
$this->config = Core::libraryConfig(__CLASS__);
$this->rules = $rules;
}
public function isValid($data) {
while(list($field, $value) = each($data)) {
$rules = $this->rules[$field];
foreach($rules as $rule => $options) {
$method = 'validate'.$rule; //тут приписывается префикс
$valid = $this->$method($value, $options); //@return true|false|string Error Message
if($valid) {
return TRUE;
} else return $valid; //Это ужасный кусок, это я тоже хочу в порядок привести. А может внутри метода записывать $this->error и вернуть false?
}
}
return TRUE;
}
public function validateEmail($value, $options = []) {
if(filter_var($value, FILTER_VALIDATE_EMAIL)) {
return TRUE;
} else return (isset($options['msg'])) ? $options['msg'] : FALSE; //Вот эти строки вечно дублируются
//Может просто вырезать ключ msg в методе валидации и работать уже там с сообщением??
}
public function validateRequired($value, $options = []) {
if(!is_null($value) || !empty($value)) {
return TRUE;
} else return (isset($options['msg'])) ? $options['msg'] : FALSE; //Вот тут метод вернет сообщение если оно передано, иначе false соответственно
//Идет дублирование, разве он должен оперировать еще и сообщениями ошибок? Нет. А ума не хватает переделать
}
}
?>
$validateRules = [
'firstname' => [
'required' => ['msg' => 'First name can\'t be empty']
//Прочие валидаторы...
],
'lastname' => [
'required' => ['msg' => 'Lastname can\'t be empty']
]
];
$validator = new Validator($validateRules);
var_dump($validator->isValid(['firstname' => NULL]));