From 73662598ef82f4e64367c8fe7c62971c9269f6fa Mon Sep 17 00:00:00 2001 From: Franz Liedke Date: Wed, 10 Jan 2018 19:32:57 +0100 Subject: [PATCH] Re-introduce Compat extender Turns out Container::call() does not work with invokable classes. Thus, we need to wrap callables in a custom extender class to support injecting any resolvable type-hint automatically. Refs #851. --- framework/core/src/Extend/Assets.php | 2 +- framework/core/src/Extend/Compat.php | 38 +++++++++++++++++++ framework/core/src/Extend/Extender.php | 19 ++++++++++ .../src/Extend/FormatterConfiguration.php | 2 +- framework/core/src/Extend/Locale.php | 2 +- framework/core/src/Extend/Routes.php | 2 +- .../core/src/Extension/ExtensionManager.php | 10 ++++- 7 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 framework/core/src/Extend/Compat.php create mode 100644 framework/core/src/Extend/Extender.php diff --git a/framework/core/src/Extend/Assets.php b/framework/core/src/Extend/Assets.php index b09654aba..482ace057 100644 --- a/framework/core/src/Extend/Assets.php +++ b/framework/core/src/Extend/Assets.php @@ -15,7 +15,7 @@ use Flarum\Frontend\Event\Rendering; use Illuminate\Contracts\Container\Container; use Illuminate\Events\Dispatcher; -class Assets +class Assets implements Extender { protected $appName; diff --git a/framework/core/src/Extend/Compat.php b/framework/core/src/Extend/Compat.php new file mode 100644 index 000000000..62e059cc4 --- /dev/null +++ b/framework/core/src/Extend/Compat.php @@ -0,0 +1,38 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Flarum\Extend; + +use Illuminate\Contracts\Container\Container; + +/** + * This class is used to wrap old bootstrap.php closures (as used in versions up + * to 0.1.0-beta7) in the new Extender format. + * + * This gives extensions the chance to work with the new API without making any + * changes, and have some time to convert to the pure usage of extenders. + * + * @deprecated + */ +class Compat implements Extender +{ + protected $callback; + + public function __construct($callback) + { + $this->callback = $callback; + } + + public function __invoke(Container $container) + { + $container->call($this->callback); + } +} diff --git a/framework/core/src/Extend/Extender.php b/framework/core/src/Extend/Extender.php new file mode 100644 index 000000000..2ee9d7e13 --- /dev/null +++ b/framework/core/src/Extend/Extender.php @@ -0,0 +1,19 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Flarum\Extend; + +use Illuminate\Contracts\Container\Container; + +interface Extender +{ + public function __invoke(Container $container); +} diff --git a/framework/core/src/Extend/FormatterConfiguration.php b/framework/core/src/Extend/FormatterConfiguration.php index ad6ca0ab7..a5532ad0b 100644 --- a/framework/core/src/Extend/FormatterConfiguration.php +++ b/framework/core/src/Extend/FormatterConfiguration.php @@ -15,7 +15,7 @@ use Flarum\Formatter\Event\Configuring; use Illuminate\Contracts\Container\Container; use Illuminate\Events\Dispatcher; -class FormatterConfiguration +class FormatterConfiguration implements Extender { protected $callback; diff --git a/framework/core/src/Extend/Locale.php b/framework/core/src/Extend/Locale.php index 916e9da88..cff7dfab2 100644 --- a/framework/core/src/Extend/Locale.php +++ b/framework/core/src/Extend/Locale.php @@ -16,7 +16,7 @@ use Flarum\Locale\LocaleManager; use Illuminate\Contracts\Container\Container; use RuntimeException; -class Locale +class Locale implements Extender { protected $directory; diff --git a/framework/core/src/Extend/Routes.php b/framework/core/src/Extend/Routes.php index c02ff92eb..c867634ec 100644 --- a/framework/core/src/Extend/Routes.php +++ b/framework/core/src/Extend/Routes.php @@ -14,7 +14,7 @@ namespace Flarum\Extend; use Flarum\Http\RouteHandlerFactory; use Illuminate\Contracts\Container\Container; -class Routes +class Routes implements Extender { protected $appName; diff --git a/framework/core/src/Extension/ExtensionManager.php b/framework/core/src/Extension/ExtensionManager.php index a970520df..ad0df4278 100644 --- a/framework/core/src/Extension/ExtensionManager.php +++ b/framework/core/src/Extension/ExtensionManager.php @@ -12,6 +12,7 @@ namespace Flarum\Extension; use Flarum\Database\Migrator; +use Flarum\Extend\Compat; use Flarum\Extension\Event\Disabled; use Flarum\Extension\Event\Disabling; use Flarum\Extension\Event\Enabled; @@ -285,7 +286,14 @@ class ExtensionManager if ($this->filesystem->exists($bootstrapper)) { $extenders = require $bootstrapper; - return (array) $extenders; + if (is_array($extenders)) { + return $extenders; + } + + // Assume that the extension has not yet switched to the new + // bootstrap.php format, and wrap the callback in a Compat + // extender. + return [new Compat($extenders)]; } else { return []; }