Всем добрый день. Делаю кастомный импорт товаров из CSV файла. Одной из его функций является запуск по крону. В модуле имплементирую не много измененный ImportHelper В моем случае назвал его TorgsoftImportHelper. В директории init/ создал services.php со следующим содержимым.
КОД: ВЫДЕЛИТЬ ВСЁ
<?php
namespace Okay\Modules\Torgsoft\TorgsoftIntegration;
use Okay\Core\EntityFactory;
use Okay\Core\Image;
use Okay\Core\Languages;
use Okay\Core\OkayContainer\Reference\ServiceReference as SR;
use Okay\Core\OkayContainer\Reference\ParameterReference as PR;
use Okay\Core\QueryFactory;
use Okay\Modules\Torgsoft\TorgsoftIntegration\helpers\BackendTorgsoftImportHelper;
return [
\Okay\Modules\Torgsoft\TorgsoftIntegration\helpers\BackendTorgsoftImportHelper::class => [
'class' => BackendTorgsoftImportHelper::class,
'arguments' => [
//new SR(Okay\Modules\Torgsoft\TorgsoftIntegration\helpers\Import::class),
new SR(QueryFactory::class),
new SR(Languages::class),
new SR(EntityFactory::class),
new SR(Image::class),
]
],
];
Такой подход вполне работает если запускать модуль через админ панель. Но когда дело доходит до запуска крон файла с помощью командной строки выдает исключение Service not found. Сам по себе крон состоит из конфиг файла с обьявлением переменной $DI и прочими зависимостями я приложу его ниже и сам крон файл который импортирует товары. Сам BackendTorgsoftImportHelper вызываю через $DI->get(). Как правильно инициализировать модуль при запуске крона и что я упускаю? Ведь если зарегистрировать BackendTorgsoftImportHelper в ядре то все работает как и предполагалось.
Обещанный файл
Okay/Modules/Torgsoft/TorgsoftIntegration/cron/configure.php
КОД: ВЫДЕЛИТЬ ВСЁ
<?php
if(!empty($_SERVER['HTTP_USER_AGENT'])){
session_name(md5($_SERVER['HTTP_USER_AGENT']));
}
session_start();
chdir(dirname(dirname(__DIR__)));
use Okay\Core\Request;
use Okay\Core\Response;
use Okay\Core\Settings;
use Okay\Core\Config;
use Okay\Core\Managers;
use Okay\Entities\ManagersEntity;
use Okay\Core\EntityFactory;
use Okay\Core\Modules\Modules;
use Okay\Core\BackendTranslations;
$rootDir=dirname(__DIR__, 5);
require_once($rootDir.'/vendor/autoload.php');
$DI = include $rootDir.'/Okay/Core/config/container.php';
/** @var Config $config */
$config = $DI->get(Config::class);
/** @var Modules $modules */
$modules = $DI->get(Modules::class);
$modules->startEnabledModules();
/** @var BackendTranslations $backendTranslations */
$backendTranslations = $DI->get(BackendTranslations::class);
/** @var EntityFactory $entityFactory */
$entityFactory = $DI->get(EntityFactory::class);
/** @var Request $request */
$request = $DI->get(Request::class);
/** @var Response $response */
$response = $DI->get(Response::class);
/** @var Settings $settings */
/** @var Managers $managers */
$managers = $DI->get(Managers::class);
/** @var ManagersEntity $managersEntity */
$managersEntity = $entityFactory->get(ManagersEntity::class);
Заранее благодарю.
КОД: ВЫДЕЛИТЬ ВСЁ
<?php
namespace Okay\Modules\Torgsoft\TorgsoftIntegration;
use Okay\Core\EntityFactory;
use Okay\Core\Image;
use Okay\Core\Languages;
use Okay\Core\OkayContainer\Reference\ServiceReference as SR;
use Okay\Core\OkayContainer\Reference\ParameterReference as PR;
use Okay\Core\QueryFactory;
use Okay\Modules\Torgsoft\TorgsoftIntegration\helpers\BackendTorgsoftImportHelper;
return [
\Okay\Modules\Torgsoft\TorgsoftIntegration\helpers\BackendTorgsoftImportHelper::class => [
'class' => BackendTorgsoftImportHelper::class,
'arguments' => [
//new SR(Okay\Modules\Torgsoft\TorgsoftIntegration\helpers\Import::class),
new SR(QueryFactory::class),
new SR(Languages::class),
new SR(EntityFactory::class),
new SR(Image::class),
]
],
];
Такой подход вполне работает если запускать модуль через админ панель. Но когда дело доходит до запуска крон файла с помощью командной строки выдает исключение Service not found. Сам по себе крон состоит из конфиг файла с обьявлением переменной $DI и прочими зависимостями я приложу его ниже и сам крон файл который импортирует товары. Сам BackendTorgsoftImportHelper вызываю через $DI->get(). Как правильно инициализировать модуль при запуске крона и что я упускаю? Ведь если зарегистрировать BackendTorgsoftImportHelper в ядре то все работает как и предполагалось.
Обещанный файл
Okay/Modules/Torgsoft/TorgsoftIntegration/cron/configure.php
КОД: ВЫДЕЛИТЬ ВСЁ
<?php
if(!empty($_SERVER['HTTP_USER_AGENT'])){
session_name(md5($_SERVER['HTTP_USER_AGENT']));
}
session_start();
chdir(dirname(dirname(__DIR__)));
use Okay\Core\Request;
use Okay\Core\Response;
use Okay\Core\Settings;
use Okay\Core\Config;
use Okay\Core\Managers;
use Okay\Entities\ManagersEntity;
use Okay\Core\EntityFactory;
use Okay\Core\Modules\Modules;
use Okay\Core\BackendTranslations;
$rootDir=dirname(__DIR__, 5);
require_once($rootDir.'/vendor/autoload.php');
$DI = include $rootDir.'/Okay/Core/config/container.php';
/** @var Config $config */
$config = $DI->get(Config::class);
/** @var Modules $modules */
$modules = $DI->get(Modules::class);
$modules->startEnabledModules();
/** @var BackendTranslations $backendTranslations */
$backendTranslations = $DI->get(BackendTranslations::class);
/** @var EntityFactory $entityFactory */
$entityFactory = $DI->get(EntityFactory::class);
/** @var Request $request */
$request = $DI->get(Request::class);
/** @var Response $response */
$response = $DI->get(Response::class);
/** @var Settings $settings */
/** @var Managers $managers */
$managers = $DI->get(Managers::class);
/** @var ManagersEntity $managersEntity */
$managersEntity = $entityFactory->get(ManagersEntity::class);
Заранее благодарю.