Fix undefined $_SESSION warning when rebuilding menu cache - #17
Open
Ibochkarev wants to merge 1 commit into
Open
Fix undefined $_SESSION warning when rebuilding menu cache#17Ibochkarev wants to merge 1 commit into
Ibochkarev wants to merge 1 commit into
Conversation
Resolve manager language through modX::getManagerLanguage and clear the menu cache partition on save/remove instead of writing a session-keyed shard without a session.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Что сделано
modMenu::rebuildCache()и другие lookup-ы языка менеджера передавали голый$_SESSIONвgetOption(). Без активной сессии (CLI, ранний bootstrap, работа save/remove cache) PHP 8+ логируетUndefined global variable $_SESSION.Изменения:
modX::getManagerLanguage()разрезолвит язык как$_SESSION ?? []→ configmanager_language→cultureKey→en.modMenu::save/removeвызываютclearCache()(cleanна партиции menu) и пропускают rebuild, ключёванный сессией. Процессоры меню по-прежнему вызываютrefresh(['menu' => []])один раз, поэтомуOnCacheUpdateсрабатывает один раз.getManagerLanguage():rebuildCache, header менеджера, lexicon, connector/manager request, country list, transport provider.getSubMenusубирает идентичные мёртвые ветки лексикона.$_SESSION ?? [].Как проверить
php -lна затронутых PHP-файлах.composer phpunit -- --filter 'modMenuTest|testGetManagerLanguage'(ожидание exit 0: 4 теста, 8 assertions).Undefined global variable $_SESSIONизmodMenu.php.manager_language, очистите кэш меню, откройте менеджер. Подтвердите, что верхнее меню рендерится на этом языке.Связанные
Без GitHub issue. Продакшен-лог:
PHPwarning: Undefined global variable $_SESSIONatcore/src/Revolution/modMenu.php:69.Совместимость
Применимо к PHP 8+. Без изменения конфигов. При активной сессии менеджера разрезолвление языка совпадает со старой цепочкой
getOption('manager_language', $_SESSION, …).Совместимость
Без удаления публичного API. Добавляет
modX::getManagerLanguage(). Хуки мутации меню чистят всю партицию menu вместо перезаписи одной записи по ключу языка. Процессоры по-прежнему срабатываютOnCacheUpdateодин раз. Безопасно для patch-потребителей.Оригинал: modxcms#16990