@ant123455432143

Как отменить загрузку полей, если клиенту не нужно их получать?

Допустим есть метод, где мы получаем определенные поля, по типу

...
$arProduct['REVIEWS'] = Review::getProductReviews($arProduct['ID']);
$arProduct['QUESTIONS'] = Question::getProductQuestions($arProduct['ID']);
...


Нужно сделать так, чтобы клиент мог указать какие поля не нужно загружать из бд.
То есть, если $fieldsToLoad = [REVIEWS, QUESTIONS], значит их не нужно передавать клиенту. Как это возможно сделать? Есть такой вариант:
$fieldsToLoad = [
        'REVIEWS' => function () use ($arProduct, $reviewsSize) {
            $arProduct['REVIEWS] = Review::getProductReviews($arProduct['ID']);
        },
        'QUESTIONS' => function () use ($arProduct, $questionsSize) {
            $arProduct['QUESTIONS'] = Question::getProductQuestions($arProduct['ID']);
        }
]

    foreach ($fieldsToLoad as $fieldName => $fieldLoader) {
        if (!in_array($fieldName, $notLoadFields)) {
            $fieldLoader();
        }
    }

Но проблема в том, что возможно нужно будет добавить общее условие для каких то полей, как пример:

...
if ($block == 60) {
        $arProduct['REVIEWS'] = Review::getProductReviews($arProduct['ID']);
        $arProduct['QUESTIONS'] = Question::getProductQuestions($arProduct['ID']);
}
...


И тогда получается не очень, так как для каждого элемента массива $fieldsToLoad, которое попадает под это условие, придется писать отдельное условие. Есть ли более лучшее решение вопроса?
  • Вопрос задан
  • 74 просмотра
Пригласить эксперта
Ответы на вопрос 2
pavlik_venik
@pavlik_venik
PHP фулстек средней руки
function addAdditionalOption( $var, $var2, $callback )
[
if ( $var == $var2 ) {
$callback();
}
]

foreach ($fieldsToLoad as $fieldName => $fieldLoader) {
        if (!in_array($fieldName, $notLoadFields)) {
           addAdditionalOption( $var, $var2, $fieldLoader );
        }
    }
Ответ написан
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
а что тебе мешает создать класс-билдер(или классы) который формирует список требуемых полей и потом вызывает соответствующие методы для получения данных?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы