/** * Check if the given application instance has been flushed * * @param Application $application The Laravel application instance * * @return bool True if the given application instance has been flushed, false if not */ public function hasBeenFlushed(Application $application) { // The problem that we are facing here, is that there is no way // of telling if the 'flush' method has been invoked, by just asking // directly. The only possible way, is to assume that if there are // no loaded service providers, then the application must have been // flushed or not yet booted. However, while the concrete implementation // does provide a method called 'getLoadedProviders', the Application-interface // that this method accepts, doesn't know about such a method at all! // In addition, if by some chance a very customised application is running, // there might not be any service providers attached to it. // // Nevertheless, we have to assume that; // a) If no core application has been resolved, the application has been flushed // b) If no core container has been resolved, the application has been flushed // @see \Illuminate\Foundation\Application::__construct // // The only way that we can obtain this information, is to rely on the 'resolved' // method, for telling us if certain instances have been resolved... // // In this case, we are looking for two special cases - the core application and the // core container of the application. If these are present / available, it should mean // that the application is still running and has yet not been flushed return !($application->resolved('app') && $application->resolved('Illuminate\\Container\\Container')); }
/** * Boot theme resolver. * * @param \Illuminate\Contracts\Foundation\Application $app * @param \Orchestra\Contracts\Theme\Theme $theme * * @return void */ protected function setThemeResolver(Application $app, Theme $theme) { // The theme is only booted when the first view is being composed. // This would prevent multiple theme being booted in the same // request. if ($app->resolved('view')) { $theme->resolving(); } else { $app->resolving('view', function () use($theme) { $theme->resolving(); }); } }