Вопрос или проблема
Фатальная ошибка: Неперехваченная ошибка типа: Cronjob::create(): Аргумент #1 ($user) должен быть типа User, передано null, вызвано в C:\xampp\htdocs\dolibarr\core\modules\DolibarrModules.class.php на строке 1695 и определено в C:\xampp\htdocs\dolibarr\cron\class\cronjob.class.php:214 Стек вызовов:
#0 C:\xampp\htdocs\dolibarr\core\modules\DolibarrModules.class.php(1695): Cronjob->create(NULL)
#1 C:\xampp\htdocs\dolibarr\core\modules\DolibarrModules.class.php(564): DolibarrModules->insert_cronjobs()
#2 C:\xampp\htdocs\dolibarr\core\modules\modAgenda.class.php(615): DolibarrModules->_init(Array, ”)
#3 C:\xampp\htdocs\dolibarr\core\lib\admin.lib.php(1228): modAgenda->init()
#4 C:\xampp\htdocs\dolibarr\install\step5.php(360): activateModule(‘modAgenda’, 1)
#5 {main} выброшено в C:\xampp\htdocs\dolibarr\cron\class\cronjob.class.php на строке 214
Я могу изменить файл cronjob C:\xampp\htdocs\dolibarr\core\modules\DolibarrModules.class.php на
gobal $user;
и затем: C:\xampp\htdocs\dolibarr\core\modules\DolibarrModules.class.php
DolibarrModules->insert_cronjobs()
будет добавлено
но я сталкиваюсь с ошибкой.
.
Ответ или решение
Ошибка Cronjob в Dolibarr: Устранение ошибки TypeError
Описание проблемы
Вы столкнулись с ошибкой в проекте Dolibarr, связанной с запуском cron-задач. Ошибка выглядит следующим образом:
Fatal error: Uncaught TypeError: Cronjob::create(): Argument #1 ($user) must be of type User, null given, called in C:\xampp\htdocs\dolibarr\core\modules\DolibarrModules.class.php on line 1695 and defined in C:\xampp\htdocs\dolibarr\cron\class\cronjob.class.php:214
Согласно трассировке стека, проблема возникает, когда метод create()
класса Cronjob
вызывается без установленного объекта пользователя, что вызывает типизацию. В результате передается значение null
, вместо ожидаемого объекта User
.
Причина возникновения ошибки
Причина возникновения этой ошибки обычно заключается в том, что во время инициализации cron-задачи Dolibarr не может получить информацию о текущем пользователе или вообще используется в контексте, где информация о пользователе недоступна. Это может произойти, например, если вы запускаете скрипт в режиме CLI (command line interface), где нет активной сессии пользователя.
Решение проблемы
-
Проверка пользователa:
Убедитесь, что в контексте, где запускается скрипт, созданы все необходимые переменные. Вы можете добавить проверку на наличие пользователя перед вызовом методаcreate()
:global $user; if (!$user) { // Недостаточно информации о пользователе, обрабатываем ошибку throw new Exception("Необходими права пользователя для запуска cron-задач."); }
-
Инициализация пользователя:
Если необходимо, вы можете инициализировать объектUser
вручную. Это можно сделать следующим образом:global $user; if (!isset($user) || is_null($user)) { $user = new User(); // Создаём объект пользователя $user->fetch(1); // Загружаем пользователя (например, с ID = 1) }
Обратите внимание, что использование статического пользователя (обычно с ID 1) увеличивает риск безопасности, поскольку может дать доступ к операциям, которые ограничены для обычных пользователей.
-
Изменение кода:
Если вы хотите изменить методinsert_cronjobs()
в файлеDolibarrModules.class.php
, вам нужно внести правки таким образом, чтобы корректно передавать объект пользователя:$this->cronjob->create($user);
Заключение
Важно понимать, что null
в качестве аргумента вместо объекта User
указывает на глубокую проблему в коде вашего приложения, которая может повлиять на функциональные возможности вашего Dolibarr. Убедитесь, что все связанные сессии и данные загружаются корректно перед вызовом операций, связанных с cron.
С учетом всех разобранных решений и проверок, вы можете устранить возникшую ошибку и обеспечить корректную работу системы назначенных заданий в Dolibarr. Не забывайте делать резервные копии и проводить тестирование после внесенных изменений, чтобы избежать потери данных и негативного влияния на эксплуатационную работу системы.