mirror of
https://github.com/flarum/core.git
synced 2025-07-26 03:01:22 +02:00
Inject dependencies when firing events, not before
The event subscriber approach means that dependencies have to be injected (and thus instantiated, along with all *their* dependencies) at the time of registering event listeners - even when events are never fired within a request's lifecycle. This is unnecessary and causes more classes than necessary to be loaded. In this case, we can explicitly register event listeners that will resolve their dependencies when the event is fired, not before. Refs #1578.
This commit is contained in:
@@ -11,13 +11,18 @@
|
||||
|
||||
namespace Flarum\Extend;
|
||||
|
||||
use Flarum\Extension\Event\Disabled;
|
||||
use Flarum\Extension\Event\Enabled;
|
||||
use Flarum\Extension\Extension;
|
||||
use Flarum\Foundation\Event\ClearingCache;
|
||||
use Flarum\Frontend\Assets;
|
||||
use Flarum\Frontend\Compiler\Source\SourceCollector;
|
||||
use Flarum\Frontend\Frontend as ActualFrontend;
|
||||
use Flarum\Frontend\RecompileFrontendAssets;
|
||||
use Flarum\Http\RouteCollection;
|
||||
use Flarum\Http\RouteHandlerFactory;
|
||||
use Flarum\Locale\LocaleManager;
|
||||
use Flarum\Settings\Event\Saved;
|
||||
use Illuminate\Contracts\Container\Container;
|
||||
|
||||
class Frontend implements ExtenderInterface
|
||||
@@ -108,11 +113,29 @@ class Frontend implements ExtenderInterface
|
||||
return $container->make('flarum.assets.factory')($this->frontend);
|
||||
});
|
||||
|
||||
$container->make('events')->subscribe(
|
||||
new RecompileFrontendAssets(
|
||||
$container->make($abstract),
|
||||
$container->make('flarum.locales')
|
||||
)
|
||||
/** @var \Illuminate\Contracts\Events\Dispatcher $events */
|
||||
$events = $container->make('events');
|
||||
|
||||
$events->listen(
|
||||
[Enabled::class, Disabled::class, ClearingCache::class],
|
||||
function () use ($container, $abstract) {
|
||||
$recompile = new RecompileFrontendAssets(
|
||||
$container->make($abstract),
|
||||
$container->make(LocaleManager::class)
|
||||
);
|
||||
$recompile->flush();
|
||||
}
|
||||
);
|
||||
|
||||
$events->listen(
|
||||
Saved::class,
|
||||
function (Saved $event) use ($container, $abstract) {
|
||||
$recompile = new RecompileFrontendAssets(
|
||||
$container->make($abstract),
|
||||
$container->make(LocaleManager::class)
|
||||
);
|
||||
$recompile->whenSettingsSaved($event);
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user