Skip to content

fix(extra-fields): не ALTER site_content, валидация key (#645) - #646

Open
Ibochkarev wants to merge 2 commits into
betafrom
fix/issue-645-extra-fields-msproduct
Open

fix(extra-fields): не ALTER site_content, валидация key (#645)#646
Ibochkarev wants to merge 2 commits into
betafrom
fix/issue-645-extra-fields-msproduct

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

Исправление создания Extra Fields из #645: не вешать колонки на modResource/site_content, чинить двойной префикс таблицы в Phinx и отклонять невалидные ключи (кириллица и т.п.).

  • Extra для товаров только через msProductData (своя таблица ms3_products)
  • msProduct / msCategory убраны из dropdown во Vue; сервер отклоняет классы без собственного metaMap['table']
  • MigrationGenerator читает unprefixed имя из mysql metaMap (prefix добавляет phinx.php)
  • Удаление legacy-записей на STI — только metadata, без DROP на site_content
  • Валидация key через GridColumnRules::isValidSqlIdentifier (+ клиентский паттерн)

Тип изменений

  • Исправление бага (non-breaking change)

Связанные Issues

Closes #645

Как это было протестировано?

cd core/components/minishop3
php tests/MigrationGeneratorTableResolveTest.php
vendor/bin/phpunit tests/Unit/Services/ExtraFieldsValidationTest.php
composer test:smoke
php -l src/Services/MigrationGenerator.php src/Services/ExtraFieldsService.php

cd ../../../vueManager
npx eslint src/components/ExtraFieldsManager.vue
npm run build
  • Автоматические тесты (smoke + PHPUnit по резолву таблицы и SQL identifier)
  • Ручное тестирование в manager (Утилиты → Свои поля) на project.test

Конфигурация тестирования:

  • MiniShop3: ветка fix/issue-645-extra-fields-msproduct
  • PHP: 8.4

Чеклист

  • Код соответствует стилю проекта
  • Лексиконы добавлены на двух языках (ru/en)
  • ESLint проходит без ошибок (затронутый Vue)
  • Обновлён CHANGELOG.md (для значимых изменений) — не в этом PR (релизный процесс)

Дополнительные заметки

Out of scope: ALTER site_content, новая msCategoryData, переписывание всего Phinx runtime, серверный allowlist классов для Vue (сейчас gate на canHostExtraField + урезанный UI).

Reject msProduct/msCategory (modResource STI), resolve unprefixed Phinx
tables from mysql metaMap, and validate field keys as SQL identifiers.
@Ibochkarev

Copy link
Copy Markdown
Member Author

Ручная проверка на project.test после sync PHP + utilities.min.js:

  • Утилиты → Свои поля: в dropdown классов нет msProduct / msCategory, есть msProductData и остальные own-table модели
  • Live bootstrap MODX: resolveTableName(msProductData) === ms3_products; msProduct/msCategorycanHostExtraField=false; кириллический key отклоняется сервером с лексиконом ms3_err_extra_field_key_invalid

@Ibochkarev
Ibochkarev requested a review from biz87 August 30, 2026 11:31
@Ibochkarev Ibochkarev added the bug Something isn't working label Aug 30, 2026
…ck (#645)

Assert ExtraFieldsService rejects STI classes and invalid keys before save,
and point the MODX_CORE_PATH-less migrations path at the package root.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] Ошибки при создании своего поля

1 participant