Skip to content

Латентный фатал getPaymentLink() (MiniShop3::loadCustomClasses) + мёртвая регистрация ms3_config_manager #484

Description

@biz87

Контекст

Обе проблемы — pre-existing в beta; их сделал видимыми новый PHPStan-гейт из #433 (сейчас они забайслайнены в phpstan-baseline.neon, поэтому CI зелёный). #433 их не вносил и не чинил — только задокументировал. Ниже — что чинить.


1. ⚠️ Латентный фатал: MiniShop3::loadCustomClasses() не существует

Файл: core/components/minishop3/src/Services/Order/OrderStatusService.php:407

protected function getPaymentLink(mixed $msPayment, msOrder $msOrder): string
{
    $class = $msPayment->get('class');
    if (!empty($class)) {
        $this->ms3->loadCustomClasses('payment');   // ← метода нет
        if (class_exists($class)) {
            ...

У класса MiniShop3\MiniShop3 нет метода loadCustomClasses() и нет __call. Значит любой вызов getPaymentLink() с непустым class платёжки → Error: Call to undefined method MiniShop3\MiniShop3::loadCustomClasses() — фатал в пути генерации ссылки на оплату. Похоже на наследие MS2 (там метод был).

Baseline-запись:

message: '#^Call to an undefined method MiniShop3\\MiniShop3\:\:loadCustomClasses\(\)\.$#'

Что делать: восстановить загрузку кастомных классов платёжек (эквивалент MS2 loadCustomClasses) либо заменить на актуальный механизм автозагрузки/резолва класса платёжки. Затем убрать запись из baseline.

Смежно с #458 (payment_link в письме о новом заказе) — этот путь пересекается; проверить, не закрывает ли #458 эту строку.


2. Мёртвая регистрация сервиса ms3_config_manager

Файл: core/components/minishop3/src/ServiceRegistry.php:47

'ms3_config_manager' => [
    'class' => \MiniShop3\Services\ConfigManager::class,   // ← класса нет
    'interface' => null,
],

Класс MiniShop3\Services\ConfigManager не существует (распилен на FilterConfigManager / ComboConfigManager / GridConfigManager), а запись в реестре осталась. Ключ ms3_config_manager не резолвится нигде (grep services->get('ms3_config_manager') → пусто), реестр ленивый → сейчас не фаталит. Безобидный мусор, но грязь.

Baseline-запись:

message: '#^Class MiniShop3\\Services\\ConfigManager not found\.$#'

Что делать: удалить мёртвую запись из ServiceRegistry::$defaultServices и убрать её из baseline.


Acceptance

  • getPaymentLink() не фаталит (восстановлен резолв класса платёжки), покрыт тестом
  • Удалена мёртвая регистрация ms3_config_manager
  • Обе записи убраны из phpstan-baseline.neon, composer stan остаётся зелёным

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions