Example #1
0
 /**
  * Создание исключение из массива, описывающего параметры исключения
  * Обратная функция для __toArray()
  * @param array $errors
  * @return Error
  */
 static function createFromArray($errors)
 {
     if (is_array($errors)) {
         if (isset($errors['code'], $errors['message'])) {
             $result = new Error($errors['message'], $errors['code']);
             if (isset($errors['children']) && is_array($errors['children'])) {
                 foreach ($errors['children'] as $name => $e) {
                     $result->add(self::createFromArray($e));
                 }
             }
             return $result;
         }
     }
     return new Error();
 }
Example #2
0
 static function fromArray($array)
 {
     if (isset($array['_attributes']['uri'])) {
         $obj = Data::read($array['_attributes']['uri']);
     } else {
         if (!isset($array['class'])) {
             $array['class'] = '\\boolive\\core\\data\\Entity';
         }
         $obj = new $array['class']();
     }
     if (!empty($array['_errors'])) {
         $obj->_errors = Error::createFromArray($array['_errors']);
     }
     if (isset($array['_children'])) {
         foreach ($array['_children'] as $key => $child) {
             $obj->_children[$key] = self::fromArray($child);
             $obj->_children[$key]->_parent = $obj;
             if ($obj->_children[$key]->_errors) {
                 $obj->errors()->_children->add($obj->_children[$key]->_errors);
             }
         }
     }
     $obj->_attributes = $array['_attributes'];
     $obj->_changes = $array['_changes'];
     $obj->_checked = $array['_checked'];
     $obj->_auto_naming = $array['_auto_naming'];
     $obj->_is_inner = $array['_is_inner'];
     return $obj;
 }
Example #3
0
 function setFilter(Rule $rule)
 {
     $this->filtered = Check::filter($this->input, $rule, $this->errors);
     return !isset($this->errors) || !$this->errors->isExist();
 }
Example #4
0
 /**
  * Проверка и фильтр массива с учетом правил на его элементы
  * @param mixed $value Значение для проверки и фильтра
  * @param null|Error &$error Возвращаемый объект исключения, если элементы не соответсвуют правилам
  * @param array $args Аргументы фильтра
  * @return array
  */
 static function arrays($value, &$error, $args)
 {
     $result = [];
     if (is_array($value)) {
         $err_msg = 'Некорректное структура массива или значения в нём';
         // Контейнер для ошибок на элементы
         $error = null;
         //$error = new Error('Неверная структура.', 'arrays');
         // Сведения о правиле
         $rule_sub = [];
         $rule_default = null;
         $tree = false;
         foreach ($args as $arg) {
             if (is_array($arg)) {
                 $rule_sub = $arg;
             } else {
                 if ($arg instanceof Rule) {
                     $rule_default = $arg;
                 } else {
                     if (is_string($arg)) {
                         $rule_default = Rule::$arg();
                     } else {
                         if ($arg === true) {
                             $tree = true;
                         }
                     }
                 }
             }
         }
         // Перебор и проверка с фильтром всех элементов
         foreach ((array) $value as $key => $v) {
             $sub_error = null;
             if (isset($rule_sub[$key])) {
                 // Отсутствие элемента
                 if (isset($rule_sub[$key]->forbidden)) {
                     $sub_error = new Error(['Элемент "%s" должен отсутствовать', $key], 'forbidden');
                 } else {
                     $result[$key] = self::filter($v, $rule_sub[$key], $sub_error);
                 }
                 unset($rule_sub[$key]);
             } else {
                 if ($rule_default) {
                     $result[$key] = self::filter($v, $rule_default, $sub_error);
                 }
                 // Если нет правила по умолчанию или оно не подошло и значение является массивом
                 if (!$rule_default || $sub_error) {
                     // Если рекурсивная проверка вложенных массивов
                     if ($tree && (is_array($v) || $v instanceof Values)) {
                         $sub_error = null;
                         $result[$key] = self::filter($v, $args, $sub_error);
                     }
                 }
                 // Если на элемент нет правила, то его не будет в результате
             }
             if ($sub_error) {
                 if (!$error) {
                     $error = new Error($err_msg, 'arrays');
                 }
                 $error->{$key}->add($sub_error);
             }
         }
         // Перебор оставшихся правил, для которых не оказалось значений
         foreach ($rule_sub as $key => $rule) {
             if (isset($rule->required) && !isset($rule->forbidden)) {
                 $result[$key] = self::filter(null, $rule, $sub_error);
                 if ($sub_error) {
                     if (!$error) {
                         $error = new Error($err_msg, 'arrays');
                     }
                     $error->{$key}->required = "Обязательный элемент без значения по умолчанию";
                 }
             }
         }
         // Если ошибок у элементов нет, то удаляем объект исключения
         if (!isset($error) || !$error->isExist()) {
             $error = null;
         }
     } else {
         $error = new Error('Должен быть массивом', 'arrays');
     }
     return $result;
 }