Рейтинг:1

Неправильный пользователь с currentUser() в продукте

флаг kn

Я получаю имя своего пользователя, которое я загружаю из профиля. Он отлично работает на моем локальном компьютере, но на моем продукте отображаемое имя показывает имя предыдущего пользователя. Как мне это предотвратить? Вот как я получаю свои данные.

Вот тут я не понимаю, я загружаю данные текущим пользователем, но пользователь не тот...

У меня есть «новое» имя только после очистки кеша моего сайта с помощью drush

/**
 * Реализует hook_preprocess_HOOK().
 */
функция frr_menu_link_preprocess_menu__account(&$variables)
{
    $current_user = \Drupal::currentUser();
    $variables['имя'] = ЛОЖЬ;
    если($current_user->проверено()) {
        $entity_manager = \Drupal::entityTypeManager();
        $profileStorage = $entity_manager->getStorage('профиль');
        $profileCustomerFound = $profileStorage->loadByProperties([
            'uid' => $current_user->id(),
            'тип' => 'клиент',
            'is_default' => 1,
            'статус' => 1,
        ]);
        если ($ профильCustomerFound > 0) {
            $customer = конец($profileCustomerFound);
            $firstname = $customer->get('field_firstname')->значение;
            $variables['имя'] = !пусто($имя) ? ucfirst($firstname): ЛОЖЬ;
        }
    }
}
флаг id
Что вы подразумеваете под «предыдущим» пользователем?
Рейтинг:3
флаг id

Это, вероятно, потому, что вы должны добавить метаданные кэшируемости поэтому Drupal умеет кэшировать контент отдельно для каждого пользователя.

флаг cn
Обязательное упоминание — изменение кеша для каждого пользователя — не лучшая идея, так как количество записей в кеше может стать большим. Ленивые строители и заполнители могут использоваться в такого рода сценариях. Здесь есть хороший пост с примерами: https://www.qed42.com/insights/coe/drupal/lazy-builders-drupal-8-caching-ftw, и если вы выполните поиск на этом сайте по запросу [lazy_builder](https:/ /drupal.stackexchange.com/search?q=lazy_builder) есть много других примеров и объяснений
флаг kn
На моем веб-сайте сейчас около 160000 пользователей, с количеством пользователей «dev» у меня нет проблем ... Итак, могу ли я добавить метаданные кэширования?
флаг kn
Если да, то как мне это сделать?
4uk4 avatar
флаг cn
Если у вас есть такое количество пользователей, добавьте `$variables['#cache'] = ['max-age' => 0];`, чтобы меню не кэшировалось для каждого пользователя, посещающего страницу. В этом случае ленивый построитель не является абсолютно необходимым, потому что меню обычно отображаются в блоках, а блоки уже имеют ленивый построитель.
4uk4 avatar
флаг cn
Хотя отдельный ленивый билдер только для $variables['firstname'] был бы неплох. Это делает загрузку страницы более плавной, когда динамические части ограничены абсолютным минимумом. См. https://drupal.stackexchange.com/questions/305479/can-bigpipe-exclude-certain-blocks
флаг kn
`$variables['#cache'] = ['max-age' => 0];` сработало отлично, спасибо!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.