di = new FactoryDefault(); $this->app = new Application(); $this->loader = new Loader(); $this->initAppEnv(); $this->initAppConfig(); $this->initAppSetting(); $this->registerLoaders(); $this->registerServices(); $this->registerModules(); $this->registerErrorHandler(); } public function handle() { $this->app->setDI($this->di); $this->app->handle()->send(); } protected function registerLoaders() { $this->loader->registerNamespaces([ 'App' => app_path(), 'Bootstrap' => bootstrap_path(), ]); $this->loader->registerFiles([ vendor_path('autoload.php'), app_path('Library/Helper.php'), ]); $this->loader->register(); } protected function registerServices() { $providers = [ ConfigProvider::class, AnnotationProvider::class, CacheProvider::class, CookieProvider::class, CryptProvider::class, CsrfTokenProvider::class, DatabaseProvider::class, EventsManagerProvider::class, FlashSessionProvider::class, LoggerProvider::class, MetaDataProvider::class, RequestProvider::class, ResponseProvider::class, RouterProvider::class, SessionProvider::class, UrlProvider::class, ViewProvider::class, VoltProvider::class, ]; foreach ($providers as $provider) { /** * @var AppProvider $service */ $service = new $provider($this->di); $service->register(); } } protected function registerModules() { $aliases = ['api', 'home', 'admin']; $modules = []; foreach ($aliases as $alias) { $moduleName = ucfirst($alias); $modules[$alias] = [ 'className' => 'App\Http\\' . $moduleName . '\Module', 'path' => app_path('Http/' . $moduleName . '/Module.php'), ]; } $this->app->registerModules($modules); } protected function registerErrorHandler() { return new HttpErrorHandler(); } }