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.
This commit is contained in:
Franz Liedke 2018-01-10 19:32:57 +01:00
parent cc1239fe9f
commit 73662598ef
7 changed files with 70 additions and 5 deletions

View File

@ -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;

View File

@ -0,0 +1,38 @@
<?php
/*
* This file is part of Flarum.
*
* (c) Toby Zerner <toby.zerner@gmail.com>
*
* 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);
}
}

View File

@ -0,0 +1,19 @@
<?php
/*
* This file is part of Flarum.
*
* (c) Toby Zerner <toby.zerner@gmail.com>
*
* 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);
}

View File

@ -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;

View File

@ -16,7 +16,7 @@ use Flarum\Locale\LocaleManager;
use Illuminate\Contracts\Container\Container;
use RuntimeException;
class Locale
class Locale implements Extender
{
protected $directory;

View File

@ -14,7 +14,7 @@ namespace Flarum\Extend;
use Flarum\Http\RouteHandlerFactory;
use Illuminate\Contracts\Container\Container;
class Routes
class Routes implements Extender
{
protected $appName;

View File

@ -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 [];
}