Esempio n. 1
0
 /**
  * По поводу удаления @see \Df\Config\A::FAKE:
  * 2016-07-30
  * Наша задача: удаление из массива всех целочисленных ключей, кроме @see \Df\Config\A::FAKE
  * Целочисленные ключи — это идентификаторы строк.
  * Нам, в принципе, без разницы их значения, лишь бы они были уникальными.
  * Однако в клиетской части (JavaScript) нам удобно, чтобы они шли по порядку и без дыр.
  * Более того, в алгоритме метода @see \Df\Framework\Form\Element\ArrayT::onFormInitialized()
  * мы уже подразумеваем, что ключи именно такими и являются: идут с нуля и без пропусков.
  *
  * Оказывается, и ключ @see \Df\Config\A::FAKE нам уже не нужен.
  * Мы ведь его добавляли в скрипте https://github.com/mage2pro/core/tree/b1f6809/Framework/view/adminhtml/web/formElement/array/main.js#L131
  * с такой целью:
  * «2015-12-30
  * Сервер так устроен, что если для конкретного поля формы
  * не придут данные с сервер (а при отсутствии элементов они не придут),
  * то сервер не обновляет значение в базе данных для этого поля.
  * Это приводит к тому эффекту, что если удалить все элементы, то сервер не сохранит данные.
  * Чтобы этого избежать, при отсутствии элементов передаём на сервер фейковый.»
  *
  * Поэтому теперь уже его можно удалить.
  *
  * По поводу валидации:
  * 2016-08-02
  * Частную валидацию объектов проводим обязательно до проверки объектов на уникальность,
  * потому что если данные объекты некорректны,
  * то проверка на уникальность может дать некорректные результаты
  * и даже привести к дополнителным сбоям.
  *
  * @override
  * @see \Df\Config\Backend\Serialized::processI()
  * @used-by \Df\Config\Backend\Serialized::processA()
  * @param array(array(string => mixed)) $a
  * @return array(array(string => mixed))
  * @throws \Exception
  */
 protected function processI(array $a)
 {
     /** @var array(array(string => mixed)) $a */
     $a = array_values(dfa_unset($a, A::FAKE));
     /** @var I[] $e */
     $e = iterator_to_array(A::i($this->entityC(), $a));
     /** @uses \Df\Config\ArrayItem::validate() */
     df_each($e, 'validate');
     /** @var int[]|string[] $repeated */
     $repeated = dfa_repeated(dfa_ids($e));
     if ($repeated) {
         df_error('The following values are not uniqie: %s.', df_csv_pretty($repeated));
     }
     $e = df_usort($e, function (I $a, I $b) {
         return $a->sortWeight() - $b->sortWeight();
     });
     /** @uses \Df\Config\ArrayItem::getData() */
     return df_each($e, 'getData');
 }
Esempio n. 2
0
/**
 * @param int|float $v
 * @param mixed[] $allowedResults
 * @param string|\Exception $message [optional]
 * @return void
 * @throws DFE
 */
function df_assert_in($v, array $allowedResults, $message = null)
{
    if (df_enable_assertions()) {
        if (!in_array($v, $allowedResults, $strict = true)) {
            df_error($message ?: (10 >= count($allowedResults) ? df_sprintf('Проверяющий ожидал значение из множества «%s», однако получил значение «%s».', df_csv_pretty($allowedResults), $v) : df_sprintf('Проверяющий получил значение «%s», отсутствующее в допустимом множестве значений.', $v)));
        }
    }
}
Esempio n. 3
0
/**
 * @param string[] ...$args
 * @return string
 */
function df_csv_pretty_quote(...$args)
{
    return df_csv_pretty(df_quote_russian(df_args($args)));
}