Описание проблемы
На странице заказа в менеджере (mgr/order) вкладки «Информация о заказе» и «Адрес» показывают:
Для этой вкладки не настроены поля формы заказа.
При этом в БД видимые msModelField и секции есть. Проблема не в ACL mssetting_save (это #613 / #614): GET /api/mgr/model-fields/visible/msOrder под пользователем без mssetting_save успешно отдаёт поля.
Корневая причина: в ComboConfigManager::buildLabel() вызывается preg_replace('/\s+/', ' ', $label) без Unicode-флага /u. В PCRE без /u символ \s совпадает с байтом 0xA0, а это второй байт UTF-8 для кириллической «Р» (U+0420 = D0 A0). Лейблы вроде «Руслан …» портятся → json_encode payload visible/* падает или Vue получает пустые results/sections → форма рисует empty-state.
Шаги воспроизведения
- Иметь покупателей/опции combo с кириллическими именами, начинающимися на «Р» (или другой символ с
0xA0 во втором байте UTF-8).
- Открыть менеджер → MiniShop3 → Заказы → любой заказ (например id=560).
- Вкладка «Информация о заказе» / «Адрес».
Ожидаемое поведение
Секции «Основная информация», «Дополнительно», адресные блоки и кнопка «Сохранить» отображаются; GET /api/mgr/model-fields/visible/msOrder стабильно отдаёт results + sections + валидный UTF-8 comboOptions.
Фактическое поведение
Сводка заказа видна, ниже текст «поля формы не настроены». Иногда повторный запрос visible/msOrder через браузер отдаёт полный envelope (~30KB, 5 results), иногда — пустой объект {"results":[],"sections":[],"comboOptions":{}} без нормального наполнения combo.
Скриншоты
На project.test при заказе #2605/1 (id=560): сводка есть, блоки полей пустые.
Окружение
- MiniShop3: 1.13.0-beta1
- MODX: 3.2.3 / 3.2.0-pl
- PHP: 8.3+ / 8.5.6 (project.test)
- Браузер: Cursor IDE browser / Chrome
Логи ошибок
Диагностика
Файл: core/components/minishop3/src/Services/ComboConfigManager.php
Метод: buildLabel()
Строка: preg_replace('/\s+/', ' ', $label); // нужен /u
CLI getVisibleFields(msOrder) после фикса /u: results=5, sections=2, json_encode OK, bad_utf8=0
ACL (#613) не виноват: read visible = 200, write settings = 403 mssetting_save
Дополнительный контекст
- Связано с проверкой #613 на project.test, но это отдельный баг.
- Предлагаемый фикс:
preg_replace('/\s+/u', ' ', $label) + regression-тест на лейбл с «Р» / invalid-UTF-8 hardening при необходимости.
- Не путать с отсутствием политики
miniShopManagerPolicy.
Описание проблемы
На странице заказа в менеджере (
mgr/order) вкладки «Информация о заказе» и «Адрес» показывают:При этом в БД видимые
msModelFieldи секции есть. Проблема не в ACLmssetting_save(это #613 / #614):GET /api/mgr/model-fields/visible/msOrderпод пользователем безmssetting_saveуспешно отдаёт поля.Корневая причина: в
ComboConfigManager::buildLabel()вызываетсяpreg_replace('/\s+/', ' ', $label)без Unicode-флага/u. В PCRE без/uсимвол\sсовпадает с байтом0xA0, а это второй байт UTF-8 для кириллической «Р» (U+0420=D0 A0). Лейблы вроде «Руслан …» портятся →json_encodepayloadvisible/*падает или Vue получает пустыеresults/sections→ форма рисует empty-state.Шаги воспроизведения
0xA0во втором байте UTF-8).Ожидаемое поведение
Секции «Основная информация», «Дополнительно», адресные блоки и кнопка «Сохранить» отображаются;
GET /api/mgr/model-fields/visible/msOrderстабильно отдаётresults+sections+ валидный UTF-8comboOptions.Фактическое поведение
Сводка заказа видна, ниже текст «поля формы не настроены». Иногда повторный запрос
visible/msOrderчерез браузер отдаёт полный envelope (~30KB, 5 results), иногда — пустой объект{"results":[],"sections":[],"comboOptions":{}}без нормального наполнения combo.Скриншоты
На
project.testпри заказе #2605/1 (id=560): сводка есть, блоки полей пустые.Окружение
Логи ошибок
Диагностика
Дополнительный контекст
preg_replace('/\s+/u', ' ', $label)+ regression-тест на лейбл с «Р» / invalid-UTF-8 hardening при необходимости.miniShopManagerPolicy.