[Решено] Обновление MODX 3.2.2 компонент FetchIt ломает сайт PHP 8.3

После обновления сайта с 3.2.0 до 3.2.2 фронтенд упал, сайт перестал открываться. Админка работает. MODX 3.2.2 / PHP 8.3.15

Ошибку пишет такую:

Fatal error: Uncaught Exception: Serialization of 'PDO' is not allowed in
/core/src/Revolution/modResponse.php:184 Stack trace: #0
/core/src/Revolution/modResponse.php(184): session_write_close() #1 
/core/src/Revolution/modRequest.php(154): MODX\Revolution\modResponse->outputContent() #2 
/core/src/Revolution/modRequest.php(138): MODX\Revolution\modRequest->prepareResponse() #3 
/core/src/Revolution/modX.php(1512): MODX\Revolution\modRequest->handleRequest() #4 
/index.php(63): MODX\Revolution\modX->handleRequest() #5 {main} thrown in 
/core/src/Revolution/modResponse.php on line 184

В логах партизанская тишина. Если бы мы знали, что это такое, но мы не знаем, что это такое [бабуля.jpg].

Даём Имитации Интеллекта эти информационные крошки и получаем подсказки для поиска разгадки:

Эта ошибка означает, что PHP пытается сохранить данные текущей сессии пользователя (во время вызова session_write_close()), но внутри массива $_SESSION оказался объект подключения к базе данных (PDO).

В PHP категорически запрещено сериализовать (сохранять в строку для кэша или сессии) активные соединения с БД.

Чаще всего это происходит, когда какой-то плагин, сниппет или дополнение по ошибке записывает весь объект $modx (или его часть, отвечающую за работу с БД) в сессию. При обновлении на MODX 3.2.2 изменились внутренние механизмы xPDO, что могло «сломать» старый код.
Это всё понятно, а сайт как починить? Кроме этого ещё советовалось попробовать другой рукой провести разные манипуляции для поиска виновника crash'ества.

В итоге, после некоторых исследований, виновник был найден: мистер FetchIt, призванный заменить устаревший AjaxForm – сломал сайт!

Вся боль от сломанного сайта прекращается после исключения данной строчки:
(файл core/components/fetchit/src/FetchIt.php:137)

$scriptProperties['FetchIt'] = $this;

Можно закомментировать или удалить эту строчку, но чудесным образом сайт начинает работать!

Пояснения от Искусственно Интеллектовича (ИИ):
Класс FetchIt зачем-то кладет самого себя ($this) в массив параметров $scriptProperties, который затем передается в сниппет FormIt. FormIt, в свою очередь, при сохранении состояния формы (например, если юзер ввел неверную капчу) берет весь массив параметров и складывает его в сессию. Поскольку внутри объекта FetchIt есть переменная $this->modx (которая получает ссылку на ядро MODX при создании класса), FormIt пытается сериализовать в сессию и её тоже. А внутри ядра MODX лежит активное подключение к базе данных (PDO). PHP это видит, бьет по рукам и выдает Fatal error
В целом все понятно, всякое бывает, думаю, пойду-ка на GitHub и сообщу разработчику о данном конфузе. Казус в том, что там последняя версия 3.1.1 (и несколько незакрытых ошибок), а на ModStore последняя 3.1.2 (которая и установлена) и обновлялось это все в 2023 году (что делать и куда идти жаловаться не понятно).

Хочется, чтобы всё было по фэн-шуй и правильное обновление лежало в репозитарии. Вдруг автор дополнения хочет сделать мир лучше и сделает исправленную версию. Аминь.
Денис Валентинович
modx.pro
583

Комментарии: 10

Иван Бочкарев
21 июля 2026, 16:30
Создайте issue, я все баги по закрывал — жду проверки и выпустим новую версию

(и несколько незакрытых ошибок)
github.com/GulomovCreative/FetchIt/pulls

+ дополнение не адаптировано под MODX 3

@Баха Волков fyi
newbmod
22 июля 2026, 16:07
Оставлю этот факт тут, вдруг кому тоже пригодится.
Стенд:
PHP 8.1
MODX 3.0.3
AjaxForm 1.2.2
FormIt 5.0.1
При обновлении Formit до 5.2.4 фронтенд падает. При отключении сниппетов AjaxForm — работоспособность сайта восстанавливается. Равно как и при откате на предыдущую версию пакета FormIt. Так что стоит обратить внимание именно на последние изменения в FormIt. Возможно и из-за этого такой сбой в связке FormIt + FetchIt.
    newbmod
    22 июля 2026, 16:20
    Второй стенд:
    PHP 8.1
    MODX 3.0.5
    FetchIt 3.1.2
    FormIt 5.0.1
    Результат тот же: При обновлении Formit до 5.2.4 фронтенд падает. При отключении сниппетов FetchIt — работоспособность сайта восстанавливается. Равно как и при откате на предыдущую версию пакета FormIt.
    Иван Бочкарев
    22 июля 2026, 20:15
    ⚠️ 13 июня 2023 года команда MODX RSC прекратила поддержку AjaxForm. Он будет продолжать быть доступным на маркетплейсах modstore.pro и extras.modx.com, но мы рекомендуем использовать вместо него компонент FetchIt.

    Для информации.
    Артур Шевченко
    25 июля 2026, 22:05
    Пользуйтесь Sendit ;-)
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      10