setSingleton(Client::class, function () { return ClientBuilder::create()->build(); });*/ $container->setSingleton(MailerInterface::class, function () use ($app) { return $app->mailer; }); $container->setSingleton(ErrorHandler::class, function () use ($app) { return $app->errorHandler; }); $container->setSingleton(Queue::class, function () use ($app) { return $app->get('queue'); }); $container->setSingleton(Cache::class, function () use ($app) { return $app->cache; }); $container->setSingleton(ManagerInterface::class, function () use ($app) { return $app->authManager; }); $container->setSingleton(ContactService::class, [], [ $app->params['adminEmail'] ]); $container->setSingleton(ShopCart::class, function () use ($app) { return new ShopCart( new HybridStorage($app->get('user'), 'cart', 3600 * 24, $app->db), new DynamicCost(new SimpleCost()) ); }); /* $container->setSingleton(YandexMarket::class, [], [ new ShopInfo($app->name, $app->name, $app->params['frontendHostInfo']), ]);*/ $container->setSingleton(Newsletter::class, function () use ($app) { //return new MailChimp( // new \DrewM\MailChimp\MailChimp($app->params['mailChimpKey']), // $app->params['mailChimpListId'] //); return new FakeSubscribe(); }); /*$container->setSingleton(SmsSender::class, function () use ($app) { return new LoggedSender( new SmsRu($app->params['smsRuKey']), \Yii::getLogger() ); });*/ $container->setSingleton(EventDispatcher::class, DeferredEventDispatcher::class); $container->setSingleton(DeferredEventDispatcher::class, function (Container $container) { return new DeferredEventDispatcher(new AsyncEventDispatcher($container->get(Queue::class))); }); $container->setSingleton(SimpleEventDispatcher::class, function (Container $container) { return new SimpleEventDispatcher($container, [ UserSignUpRequested::class => [UserSignupRequestedListener::class], UserSignUpConfirmed::class => [UserSignupConfirmedListener::class], //ProductAppearedInStock::class => [ProductAppearedInStockListener::class], //EntityPersisted::class => [ // ProductSearchPersistListener::class, // CategoryPersistenceListener::class, //], //EntityRemoved::class => [ // ProductSearchRemoveListener::class, // CategoryPersistenceListener::class, //], ]); }); $container->setSingleton(AsyncEventJobHandler::class, [], [ Instance::of(SimpleEventDispatcher::class) ]); /* $container->setSingleton(Filesystem::class, function () use ($app) { return new Filesystem(new Ftp($app->params['ftp'])); }); $container->set(ImageUploadBehavior::class, FlySystemImageUploadBehavior::class); */ // Set frontend languages if (\Yii::$app->moduleManager->isTableExist('{{%languages}}') && file_exists(Yii::getAlias('@common/modules/languages/LanguagesModule.php'))) { $language = Language::find()->active()->default()->one(); Yii::$app->params['defaultLanguage'] = $language ? $language->name : 'ru'; Yii::$app->params['translatedLanguages'] = ArrayHelper::map(Language::find()->active()->all(), 'name', 'title'); } else { Yii::$app->params['defaultLanguage'] = 'en'; Yii::$app->params['translatedLanguages'] = ['en']; } // Set backend languages if (basename($app->getBasePath()) === 'backend') { $app->language = !$app->user->isGuest && $app->user->identity->user->backend_language ? $app->user->identity->user->backend_language : Yii::$app->params['defaultLanguage']; $app->params['frontendLanguage'] = Yii::$app->session->get('frontendLanguage', Yii::$app->params['defaultLanguage']); } // Connect common modules if (\Yii::$app->moduleManager->isTableExist('{{%modules}}')) { $modules = ModuleRecord::find()->andWhere(['type' => 'common'])->andWhere(['active' => 1])->all(); foreach ($modules as $module) { Yii::$app->setModule($module->name, [ 'class' => $module->class, ]); Yii::$app->getModule($module->name)->bootstrap(Yii::$app); } } else { // connect all existing modules $this->connectExistingModules(); } } private function connectExistingModules(): void { $modules = Yii::$app->moduleManager->getLocalModules(); //print_r($modules); die; foreach ($modules as $module) { Yii::$app->setModule($module['name'], [ 'class' => 'common\modules\\' . $module['name'] . '\\' . $module['module'], ]); Yii::$app->getModule($module['name'])->bootstrap(Yii::$app); } } }