← К документации

Ядро

Result, ошибки и журналирование

Проверка Result, закрытые журналы и диагностика ошибок без публикации данных CRM.

Проверять результат операции

В D7 ошибка часто возвращается внутри Result, а не выбрасывается как исключение. Приведение такого объекта к bool не проверяет успех.

<?php

$result = $operation->launch();
if (!$result->isSuccess()) {
    $error_messages = $result->getErrorMessages();
    // Передайте сообщения в обработчик ошибок вашего приложения.
    throw new \RuntimeException('Операция не выполнена');
}

$operation здесь — подготовленная операция CRM. Способ получения объекта зависит от конкретного API; произвольные методы могут возвращать другие типы.

Журнал за пределами публичного каталога

Каталог /local/logs/ сам по себе не закрыт от HTTP. Для серверной диагностики используйте журнал, доступный администратору, но не посетителю сайта. Расположение error_log задаётся настройкой PHP; проверьте его до записи данных.

<?php

error_log(json_encode([
    'event' => 'crm_sync_failed',
    'entity_id' => (int) $entity_id,
    'error_code' => 'REMOTE_TIMEOUT',
], JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR));

Записывайте тип события и технический идентификатор. Полный запрос, OAuth-ответ, вебхук и массив полей CRM в такой записи не нужны. Для Debug::writeToFile и AddMessage2Log также нужно отдельно настроить закрытое место хранения: имя метода не обеспечивает защиту файла.

Ошибки PHP в браузере и на сервере

В рабочей среде показ ошибок посетителю выключают, а запись в серверный журнал оставляют. CLI и PHP-FPM могут использовать разные конфигурации: успешный запуск из консоли не подтверждает настройки веб-процесса.

Отсутствие пользовательского сообщения после операции не доказывает, что операция не запускалась. Найдите запись веб-сервера и PHP за тот же запрос.

Источники