Change order of bootstrapping

See commit on flarum/flarum for explanation
This commit is contained in:
Toby Zerner 2015-07-20 18:01:08 +09:30
parent 77d0bfccd7
commit 74593d82ac
6 changed files with 52 additions and 93 deletions

View File

@ -1,7 +1,5 @@
<?php namespace Flarum\Core;
use Flarum\Core\Settings\MemoryCacheSettingsRepository;
use Flarum\Core\Settings\DatabaseSettingsRepository;
use Flarum\Core\Users\User;
use Flarum\Events\ModelAllow;
use Flarum\Support\ServiceProvider;
@ -39,14 +37,6 @@ class CoreServiceProvider extends ServiceProvider
*/
public function register()
{
$this->app->singleton('Flarum\Core\Settings\SettingsRepository', function () {
return new MemoryCacheSettingsRepository(
new DatabaseSettingsRepository(
$this->app->make('Illuminate\Database\ConnectionInterface')
)
);
});
$this->app->singleton('flarum.forum', 'Flarum\Core\Forum');
// TODO: probably use Illuminate's AggregateServiceProvider

View File

@ -0,0 +1,22 @@
<?php namespace Flarum\Core\Settings;
use Flarum\Support\ServiceProvider;
class SettingsServiceProvider extends ServiceProvider
{
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$this->app->singleton('Flarum\Core\Settings\SettingsRepository', function () {
return new MemoryCacheSettingsRepository(
new DatabaseSettingsRepository(
$this->app->make('Illuminate\Database\ConnectionInterface')
)
);
});
}
}

View File

@ -0,0 +1,7 @@
<?php namespace Flarum\Support;
use Flarum\Support\ServiceProvider;
class Extension extends ServiceProvider
{
}

View File

@ -1,42 +0,0 @@
<?php namespace Flarum\Support\Extensions;
use Flarum\Core;
use Illuminate\Support\ServiceProvider;
class ExtensionsServiceProvider extends ServiceProvider
{
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
}
/**
* Boot the service provider.
*
* @return void
*/
public function boot()
{
// Extensions will not be registered if Flarum is not installed yet
if (!Core::isInstalled()) {
return;
}
$config = $this->app->make('Flarum\Core\Settings\SettingsRepository')->get('extensions_enabled');
$extensions = json_decode($config, true);
$providers = [];
foreach ($extensions as $extension) {
if (file_exists($file = public_path().'/extensions/'.$extension.'/bootstrap.php') ||
file_exists($file = base_path().'/extensions/'.$extension.'/bootstrap.php')) {
$providers[$extension] = require $file;
}
}
// @todo store $providers somewhere (in Core?) so that extensions can talk to each other
}
}

View File

@ -0,0 +1,23 @@
<?php namespace Flarum\Support;
class ExtensionsServiceProvider extends ServiceProvider
{
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$config = $this->app->make('Flarum\Core\Settings\SettingsRepository')->get('extensions_enabled');
$extensions = json_decode($config, true);
$providers = [];
foreach ($extensions as $extension) {
if (file_exists($file = public_path().'/extensions/'.$extension.'/bootstrap.php')) {
$providerName = require $file;
$providers[$extension] = $this->app->register($providerName);
}
}
}
}

View File

@ -1,22 +1,9 @@
<?php namespace Flarum\Support;
use Flarum\Extend\ExtenderInterface;
use Illuminate\Support\ServiceProvider as IlluminateServiceProvider;
use Illuminate\Contracts\Events\Dispatcher;
use InvalidArgumentException;
class ServiceProvider extends IlluminateServiceProvider
{
/**
* Bootstrap the application events.
*
* @return void
*/
public function boot()
{
$this->extend($this->extenders());
}
/**
* Register the service provider.
*
@ -25,32 +12,4 @@ class ServiceProvider extends IlluminateServiceProvider
public function register()
{
}
/**
* @return ExtenderInterface[]
*/
public function extenders()
{
return [];
}
/**
* @param ExtenderInterface|ExtenderInterface[] $extenders
* @return void
*/
protected function extend($extenders)
{
if (! is_array($extenders)) {
$extenders = [$extenders];
}
foreach ($extenders as $extender) {
if (! $extender instanceof ExtenderInterface) {
throw new InvalidArgumentException('Argument must be an object of type '
. ExtenderInterface::class);
}
$extender->extend($this->app);
}
}
}